在开始返回bean之前,如何确保在配置中注入资源?

时间:2012-06-11 03:20:23

标签: java spring configuration annotations

我正在尝试定义一个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。

我该如何处理这个问题?

谢谢, 彼得

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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
        );
    }