Исправление, вероятно, выглядит примерно так:
public Controller(
@Qualifier("beanQualifier") KeyCardManager database,
LdapPersonDao personManager,
GiveFormValidator validator
)
Поскольку в контексте приложения, по-видимому, есть два компонента типа KeyCardManager
, необходимо указать контексту, какой из них подключить.
К сожалению, механизм @Qualifier
не работает с именами bean-компонентов, вы должны либо аннотировать фактический bean-компонент соответствующим @Qualifier
, либо добавить элемент <qualifier>
в определение bean-компонента XML.
@Resource
аннотация работает с именами компонентов, но не поддерживает параметры конструктора (это не ошибка Spring, это стандартная аннотация JSR-250 с @Target({TYPE, FIELD, METHOD})
)
Справка:
Устранение неполадок
Если вы не знаете, почему в контексте присутствуют два bean-компонента одного типа, прежде всего перейдите к интерфейсу bean (я предполагаю, что KeyCardManager
- это интерфейс, еслинет, сделать то же самое для класав любом случае) и если вы используете Eclipse, выберите Navigate > Open Type Hierarchy
.Если вы обнаружите более одного конкретного класса, который наследуется от KeyCardManager
(включая сам KeyCardManager
), то, вероятно, ваша проблема.
Если это не так, возможно, у вас два компонента одного типав контексте вашего приложения.Это может произойти, когда вы определяете bean-компонент через XML и сканирование пути к классам .То есть, если у вас есть эта строка в вашем XML:
<context:component-scan base-package="org.example"/>
Убедитесь, что вы не проводите вручную какие-либо bean-компоненты из пакета org.example
(или у вас будут двойные bean-компоненты, которые могут привести к проблеме, которую выесть).