Spring - введите 2 beans того же типа
Мне нравится инъекция на основе конструктора, поскольку она позволяет мне вводить введенные поля 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" />
Должен быть способ указать идентификатор bean в конструкторе класса SomeClass
, но я не могу найти его в документации. Возможно ли, или мне снится решение, которое еще не существует?
Ответы
Ответ 1
@Autowired
является по типу (в данном случае); используйте @Qualifier
для автоопределения по имени, следуя примеру из spring docs:
public SomeClass(
@Qualifier("bean1") OtherClass bean1,
@Qualifier("bean2") OtherClass bean2) {
...
}
Примечание. В отличие от @Autowired, который применим к полям, конструкторам и методам с несколькими аргументами (позволяя сузить через аннотации классификатора на уровне параметра), @Resource поддерживается только для полей и bean методов настройки свойств с помощью один аргумент. Как следствие, придерживайтесь квалификаторов, если ваша цель внедрения - это конструктор или метод с несколькими аргументами.
(ниже этот текст является полным примером)