Java 使用Spring将包中的所有实例添加到列表

Java 使用Spring将包中的所有实例添加到列表,java,spring,inversion-of-control,Java,Spring,Inversion Of Control,我有一个类“Box”,带有add方法,接受所有水果: public class Box { List <IFruit> fruits; public void add (IFruit fruit) { fruits.add(fruit); } } 公共类框{ 列出水果; 公共无效添加(IFruit水果){ 水果。添加(水果); } } 我想用Spring的applicationContext.xm

我有一个类“Box”,带有add方法,接受所有水果:

  public class Box {
        List <IFruit> fruits;

        public void add (IFruit fruit) {
             fruits.add(fruit);
        }
  }
公共类框{
列出水果;
公共无效添加(IFruit水果){
水果。添加(水果);
}
}
我想用Spring的applicationContext.xml定义这个类的一个单例实例,它将添加所有的IFruits实现(那些出现在包x.y.fruits中,用于inst.x.y.fruits.Apple)

第一部分很简单:

  <bean id="box" class="x.y.Box"/>

但是如何连接所有IFruit实例呢


谢谢

如果您为列表创建一个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" />
...

...
...

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

如果您为列表创建一个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" />
...

...
...

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

如果您
@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);
    }
}
公共类框{
@自动连线
列出水果;//这应该包含ApplicationContext中的所有IFruit
公共无效添加(IFruit水果){
水果。添加(水果);
}
}

当然,您需要将元素
添加到xml配置中,以便
@Autowired
工作…

如果您
@Autowired
字段,则无需定义任何内容,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);
    }
}
公共类框{
@自动连线
列出水果;//这应该包含ApplicationContext中的所有IFruit
公共无效添加(IFruit水果){
水果。添加(水果);
}
}

当然,您需要将元素
添加到xml配置中,
@Autowired
才能工作……

这个问题和答案是什么?您所说的实例是指声明的bean,还是希望收集所有实现类的单个实例而不实际将它们声明为bean?这是您要寻找的问题和答案吗?您所说的实例是指已声明的bean,还是希望收集所有实现类的单个实例而不实际将它们声明为bean?这很好!但是我必须列出所有的课程吗?我真的很想使用给定包中的所有类。@Vojtěch:您必须在一个地方或另一个地方列出这些类。没有办法自动找到给定包中的所有类。这很好!但是我必须列出所有的课程吗?我真的很想使用给定包中的所有类。@Vojtěch:您必须在一个地方或另一个地方列出这些类。无法自动查找给定包中的所有类。