我正在尝试定义一个bean,它是使用@Component批注配置的bean列表。我正在使用Spring 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已经创建。

我应该如何处理这个问题?

谢谢,
彼得

最佳答案

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

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

09-25 23:42