Подтвердить что ты не робот

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, но я не могу найти его в документации. Возможно ли, или мне снится решение, которое еще не существует?

4b9b3361

Ответ 1

@Autowired является по типу (в данном случае); используйте @Qualifier для автоопределения по имени, следуя примеру из spring docs:

public SomeClass(
    @Qualifier("bean1") OtherClass bean1, 
    @Qualifier("bean2") OtherClass bean2) {
    ...
}

Примечание. В отличие от @Autowired, который применим к полям, конструкторам и методам с несколькими аргументами (позволяя сузить через аннотации классификатора на уровне параметра), @Resource поддерживается только для полей и bean методов настройки свойств с помощью один аргумент. Как следствие, придерживайтесь квалификаторов, если ваша цель внедрения - это конструктор или метод с несколькими аргументами.

(ниже этот текст является полным примером)