3

拡張する何百ものアクションを定義する春の設定がありますMyAction。実行サービスがアクションを検索できるプールがあります。各アクションには、実行サービスが使用する 1 つ以上の「キー」があり、プールがその依存関係をカットするため、appContext を直接使用することはできません。

MyActionしたがって、プールは、タイプのすべての Bean (または拡張する Bean )を収集できる必要がありますMyAction

メソッドApplicationContext.getBeansOfType()は必要なことをしているようですが、いつ安全に呼び出すことができますか?

メソッドでそれを呼び出すことができれば素晴らしいことです@PostConstructが、Bean ファクトリがその時点で構成からすべての Bean を追加したことを確認できることは保証されていますか?

注:私の豆のほとんどすべては@Lazy

4

2 に答える 2

2

Collectionコンストラクターによる注入を使用して、自分のを渡すことができますMyAction

何かのようなもの

 @Component
 public class Foo {
     private final Set<MyAction> myActions;

     @Inject
     public Foo(Set<MyAction> myActions) { this.myActions = myActions; }
 }

また

 public class Foo {
     private Set<MyAction> myActions;

     @Inject
     public void setMyActions(Set<MyAction> myActions) { this.myActions = myActions; }
 }

Spring は、拡張するすべての Bean でセットを作成しますMyAction

最初のケースでは、それらはコンストラクターによって注入され、どのメソッドでも安全に使用できます。

2 番目のケースでは、Spring は最終的にセッターを呼び出します。セッターで任意の後処理を行うか、@PostConstructで動作するメソッドを追加できmyActionsます。

于 2013-01-09T13:44:38.293 に答える
1

このListableBeanFactoryように使用してみてください。API ドキュメントもここにあります。メソッドgetBeansOfTypeには、遅延オブジェクトの熱心な初期化を強制するパラメーターがあります。allowEagerInit

于 2013-01-09T13:41:02.877 に答える