Есть ли в Spring способ автоматически связать все зависимости заданного типа? - PullRequest
8 голосов
/ 16 августа 2011

Я использую проводку на основе аннотаций (т. Е. @Configurable(autowire=Autowire.BY_TYPE)) для данного класса, и я хотел бы связать все компоненты данного типа в него в виде списка:

контекст приложения:

<beans>
    <bean class="com.my.class.FirstConfigurer"/>
    <bean class="com.my.class.SecondConfigurer"/>
</beans>

класс для автоматического подключения:

@Configurable(autowire=Autowire.BY_TYPE) public class Target {
    ...
    public void setConfigurers(List<Configurer> configurers) { ... }
}

Все зависимости реализуют общий интерфейс с именем Configurer

Есть ли способ заставить эту работу иметь всезависимости типа, соединенные вместе в коллекции и внедренные в случае необходимости, или я должен определить <list> в XML или что-то еще?

Ответы [ 2 ]

8 голосов
/ 16 августа 2011

Да,

@Inject
private List<Configurer> configurers;

работает, и вы получаете список всех bean-компонентов, реализующих интерфейс. (несколько вариантов - @Inject или @Autowired, инъекция поля, сеттера или конструктора - все работает)

2 голосов
/ 16 августа 2011

Это должно работать:

@Configurable(autowire=Autowire.BY_TYPE) 
public class Target {

    @Autowired
    public void setConfigurers(List<Configurer> configurers) { ... }

}

Это описано в разделе 3.9.2 руководства Spring :

Также возможно предоставитьвсе компоненты определенного типа из ApplicationContext путем добавления аннотации к полю или методу, который ожидает массив этого типа [...] То же самое относится к типизированным коллекциям.

...