Ответ 1
Самое простое решение - использовать @Resource
@Resource(name="bean1")
public void setBean( BeanType bean ) {
}
Кстати, @Qualifier
используется для обозначения beans по идентификатору для использования с @Autowired
, например
@Autowired @Qualifier("bean1")
public void setBean( BeanType bean ) {
}
где bean1
- это идентификатор bean, который должен быть введен.
См. руководство Spring:
Для ответного соответствия имя bean считается значением классификатора по умолчанию. Таким образом, вы можете определить bean с идентификатором "main" вместо вложенного элемента классификатора, что приведет к тому же результату сопоставления. Тем не менее, хотя вы можете использовать это соглашение для обозначения конкретного beans по имени,
@Autowired
в основном относится к инъекции с использованием типов с необязательными семантическими классификаторами. Это означает, что значения квалификатора, даже с резервным именем имени bean, всегда имеют сужение семантики в пределах набора совпадений типа; они не семантически выражают ссылку на уникальный идентификатор bean.
и
Если вы намерены выразить инъекцию, вызванную аннотацией, по имени, не используйте в первую очередь
@Autowired
, даже если технически можно ссылаться на имя bean через значения@Qualifier
. Вместо этого используйте аннотацию JSR-250@Resource
, которая семантически определена для идентификации конкретного целевого компонента по его уникальному имени, причем объявленный тип не имеет отношения к процессу сопоставления.
Я предпочитаю @Resource
, он более чистый (и не Spring -специфичный).