나는이 executor가 두 개의 클래스로 나눠 져야한다. 하나는 세션 스코프이고 다른 하나는 싱글 톤이다. 그래서 나는 @Autowired
annotation을 사용하여 양쪽 모두에 주입한다. , 그것은 아주 잘 작동하지만 세션 빈에 대해서 집행자는 모든 세션에 대해서 하나 뿐이며, 이것이 어떻게 작동하는지 이해합니다.스프링 빈 범위는 autowired 콩의 클래스로
executor가 주입 된 bean의 범위를 어떻게 만들 수 있습니까? 이제 내가 할 수있는 것은 각각 서로 다른 두 개의 클래스를 사용하는 것입니다.
의 설정 효과가 <context-component-scan />
에서 targetClass
인 사실을 저는 거의 알지 못합니다.
편집 여기
프로토 타입 범위 내 시도 밖으로 :
이 내 세션 콩을
@Component
@Scope("session")
public class WebExecutor(){
@Autowired
private ExecutorService executor;
@Async
public void startCalc(){
executor.start("now");
}
}
을 soped입니다 가정은 그리고 이것은 내 ExecutorService를 클래스입니다
@Component
@Scope("prototype")
public class ExecutorService{
private int progress;
public void start(String when){
//do some stuff and increment the progress
}
//getter and setter for progress
}
또 다른 콤보도 있습니다. executor를 autowire하는 기본 싱글 톤 스코프를 가지고 있기 때문에 executor는 세션 스코프가 될 수 없다.
그래서 이제는 클래스가 자동으로 채워지는 bean의 범위가 필요하므로 프로토 타입 범위를 시도했습니다. 이 웹 버전에서 작동하는 방법을
당신은 그럼 나는를 사용하여 ExecutorService입니다에서 진행을 얻을 WebExecutor
- 같다 WebParser를 선택하고 사용자에게 전달하여 진행 상황을보고합니다.
이 프로토 타입 전에 좋은 일하고 있지만, ExecutorService를 모든 세션에 대한 하나,
를 그래서 나는 프로토 타입을 사용하지만 지금은 진보는 항상 0이고, 나는 실행 프로그램을 디버깅 할 때 나는 그것이 증가하는 것을 발견 그러나 사실상 WebExecutor는 증가를 볼 수 없었습니다.
위대한 답변은 지금 테스트하고 피드백을 주겠다. Ondrej – engma
나는 피곤하지만 세션을 생성 한 빈에서 executor 멤버에게 인스턴스를 생성 한 후에 액세스 할 수 없다. 내가 무엇을 요청합니까 Executor Async 메서드를 호출하고 실행 후 값을 얻지 만 프로토 타입이 작동하지 않습니다 – engma
다른'session scoped' beans에서 호출합니까? 그렇다면'session scope'가 있어야합니다. 비동기 호출을 얼마나 오래 사용할 수 있습니까? 하나의 세션? 'singletons'에서'session scoped' 빈에 접근하지 않았습니다. 세션 빈에서'싱글 톤 '에 접근하면됩니다. –