Добавление всех экземпляров в пакете в список с помощью Spring - PullRequest
1 голос
/ 12 февраля 2012

У меня есть класс "Ящик" с методом добавления, который принимает все фрукты:

  public class Box {
        List <IFruit> fruits;

        public void add (IFruit fruit) {
             fruits.add(fruit);
        }
  }

Я бы хотел определить с помощью applicationContext.xml Spring одноэлементный экземпляр этого класса, в который были бы добавлены все реализации IFruits (которые появляются в пакете x.y.fruits, например, для x.y.fruits.Apple).

Первая часть проста:

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

Но как связать все экземпляры IFruit?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

Если вы @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/> в вашу конфигурацию xml, чтобы @Autowired заработал ...

2 голосов
/ 12 февраля 2012

Если вы создадите установщик для списка, скажем, 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" />
...

Вы можете сделать это аналогичным образом, используя инжектор конструктора.

...