1

@Component アノテーションを使用して構成した Bean のリストである Bean を定義しようとしています。私は春3.1を使用しています。

私の @Configuration クラスは次のようになります

@Configuration
public class ReferenceDataConfig {
    private ResourceA resourceA;

    @Resource
    private ResourceB resourceB;

    @Resource
    private ResourceC resourceC;

    @Resource
    private ResourceD resourceD;

    @Bean (name = "myResourceList")
    public List<MyResource> getResourceLst() {
        return Arrays.asList(
                resourceA
                , resourceB
                , resourceC
                , resourceD
        );
    }

    @Resource  (name = "resourceA")
    public void setResourceA(ResourceA resourceA) {
        this.resourceA = resourceA;
    }

私が見つけたのは、リソースが初期化される前に getResourceLst が呼び出されていることです。setResourceA メソッドを追加すると、最終的に呼び出されることがわかりますが、呼び出されるまでには手遅れです。myResourceList Bean はすでに作成されています。

この問題にどう対処すればよいですか?

ありがとう、ピーター

4

2 に答える 2

0

春に発生する可能性のあるバグだと思います。私は私が持っているはずのものを集めます、しかし次の回避策は私のためにトリックをします:

@Configuration
public class ReferenceDataConfig {
    @Bean (name = "myResourceList")
    public List<MyResource> getResourceLst(ResourceA resourceA, ResourceB resourceB, ResourceC resourceC, ResourceD resourceD) {
        return Arrays.asList(
                resourceA
                , resourceB
                , resourceC
                , resourceD
        );
    }
于 2012-06-11T07:59:23.573 に答える
0

正確に何をしようとしているのかによっては、解決策は思ったよりも簡単かもしれません。

List<MyResource>がタイプ のすべての Bean を含むことになっている場合MyResource、リスト用に別の Bean を宣言する必要はありません。他の Bean を注入する場合と同じようにリストを注入するだけで、Spring はMyResourceアプリケーション コンテキストで見つかったタイプのすべての Bean を収集し、それらすべてをList<MyResource>オブジェクトとして注入します。

于 2012-06-11T05:11:54.260 に答える