我这个:
@Named
@Singleton
public class MyDefaultDef {
@Inject
public MyDefaultDef(SomeRef someRef, List<AnotherRef> anotherRefs) {
//...
}
//...
}
问题1:[主要] 如何将List<AnotherRef> anotherRefs
作为构造函数自动装配arg?
我的意思是如果我想用xml替换那个bean定义,我必须指定列表的每个元素。即
<constructor-arg>
<list>
<ref bean="..."/>
<ref bean="..."/>
</list>
</constructor-arg>
但是,Spring会在注释的情况下采用这些元素吗?
问题2: 如何将MyDefaultDef
bean定义替换为xml?
答案 0 :(得分:1)
当Spring需要自动装配List<SomeBean>
时,它会查找其BeanFactory
中的所有bean,并检索所有类型为SomeBean
的bean。它会创建一个List
并将它们添加到它。然后它自动装配它。
Spring XML无法按类型执行此列表。你需要妥协。你这样离开你的班级
public class MyDefaultDef {
@Inject
public MyDefaultDef(SomeRef someRef, List<AnotherRef> anotherRefs) {
//...
}
//...
}
并简单声明
<bean class="com.example.MyDefaultDef" autowire="constructor"/>
Spring将最终使用上面的构造函数。