将包中的所有实例添加到带有Spring的List中

时间:2012-02-12 19:06:42

标签: java spring inversion-of-control

我有一个“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实例?

谢谢!

2 个答案:

答案 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" />
...

您也可以使用构造函数注入来执行此操作。