1

我正在尝试定义一个 bean,它是我使用 @Component 注释配置的 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

根据您要执行的操作,解决方案可能比您想象的要简单。

如果List<MyResource>应该包含所有类型的 bean MyResource,那么您不必为列表声明单独的 bean。您可以像注入任何其他 bean 一样注入列表,Spring 将收集MyResource它在应用程序上下文中找到的所有类型的 bean,并将它们全部作为List<MyResource>对象注入。

于 2012-06-11T05:11:54.260 回答
0

我认为 Spring 中可能存在错误。我收集了我应该工作的东西,但是以下解决方法对我有用:

@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 回答