我正在尝试定义一个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。
我该如何处理这个问题?
谢谢, 彼得
答案 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
);
}