Весна-впрысните 2 фасоли такого же типа
мне нравится инъекция на основе конструктора, поскольку она позволяет мне делать инъекционные поля final
. Мне также нравится аннотации управляемой инъекции, как это упрощает мой context.xml
. Я могу отметить мой конструктор с @Autowired
и все работает нормально, пока у меня нет двух параметров одного типа. Например, у меня есть класс:
@Component
public class SomeClass {
@Autowired(required=true)
public SomeClass(OtherClass bean1, OtherClass bean2) {
…
}
}
и контекст приложения с:
<bean id="bean1" class="OtherClass" />
<bean id="bean2" class="OtherClass" />
должен быть способ указать идентификатор компонента в конструкторе класса SomeClass
, но Я не могу найти его в документации. Возможно ли это, или я мечтаю о решении, которое еще не существует?
1 ответ:
@Autowired
по типу (в данном случае); используйте@Qualifier
к autowire по имени, следуя примеру С весны и документы:public SomeClass( @Qualifier("bean1") OtherClass bean1, @Qualifier("bean2") OtherClass bean2) { ... }
Примечание: В отличие от @Autowired, который применим к полям, конструкторам и методам с несколькими аргументами (что позволяет сужать аннотации квалификаторов на уровне параметров), @Resource поддерживается только для методов Fields и bean property setter с одним аргументом. Как следствие, придерживайтесь квалификаторов, если ваша цель инъекции-это конструктор или метод с несколькими аргументами.
(ниже этого текста приведен полный пример)