私はSpring Beanと呼んExecutor
でいます.このエグゼキュータを2つのクラスに注入する必要があります.1つはセッションスコープで、もう1つはシングルトンです.したがって、@Autowired
アノテーションを使用して両方に注入します.非常にうまく機能します.しかし、セッションビーンの場合、エグゼキュータは1つだけです.すべてのセッションで、これがどのように機能するかを理解しています。
エグゼキュータに、注入された Bean のスコープを取得させるにはどうすればよいですか? 今できることは、それぞれに 2 つの異なるクラスを使用することだけです。
scoped-proxy
そして、属性を
<context-component-scan />
に設定することの効果を本当に理解できませんtargetClass
。
編集
これがプロトタイプスコープの私の試みです:
これが私のセッション soped Bean だとします。
@Component
@Scope("session")
public class WebExecutor(){
@Autowired
private ExecutorService executor;
@Async
public void startCalc(){
executor.start("now");
}
}
そして、これは私の 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
}
また、エグゼキュータも自動配線するデフォルトのシングルトンスコープを持つ別のコンポーネントがあるため、エグゼキュータをセッションスコープにすることはできません。
これで、自動配線されている Bean のスコープを持つために必要な 1 つのクラスができたので、プロトタイプ スコープを試しました。
これがWeb版でどのように機能するかは次のようになります
- メソッド start を呼び出す実行を開始するリンクをクリックすると、
WebExecutor
- 次に、WebParser を使用して ExecutorService から進行状況を取得し、それをユーザーに渡して進行状況を報告します。
これはプロトタイプの前はうまく機能していましたが、ExecutorService はすべてのセッションに対して 1 つでした。
そのため、プロトタイプを使用しましたが、現在は進行状況が常に 0 です。Executor をデバッグすると、増加していることがわかりましたが、どうやら WebExecutor は増加を認識できませんでした。