我有一个“Box”类,其中add方法接受所有的成果:
public class Box {
List <IFruit> fruits;
public void add (IFruit fruit) {
fruits.add(fruit);
}
}
我想用Spring的applicationContext.xml定义这个类的单例实例,它将添加所有的IFruits实现(这些实现出现在x.y.fruits包中,用于inst.x.y.fruits.Apple)。
第一部分很简单:
<bean id="box" class="x.y.Box"/>
但是如何连接所有IFruit实例?
谢谢!
答案 0 :(得分:3)
如果您@Autowire
该字段,则无需定义任何内容,Spring将在应用程序上下文中找到IFruit
接口的所有实例并加载它们。
public class Box {
@Autowired
List <IFruit> fruits; //This should contain all IFruit's in the ApplicationContext
public void add (IFruit fruit) {
fruits.add(fruit);
}
}
当然,您需要将元素<context:annotation-config/>
添加到@Autowired
的xml配置才能正常工作...
答案 1 :(得分:2)
如果你为列表创建一个setter,比如说setFruits
,你可以这样连线:
<bean id="box" class="x.y.Box">
<property name="fruits">
<list>
<ref bean="fruit1" />
<ref bean="fruit2" />
...
</list>
</property>
</bean>
<bean id="fruit1" class="x.y.fruits.Apple" />
...
您也可以使用构造函数注入来执行此操作。