La solution est probablement quelque chose comme ça :
public Controller(
@Qualifier("beanQualifier") KeyCardManager database,
LdapPersonDao personManager,
GiveFormValidator validator
)
Puisqu'il y a apparemment deux haricots de type KeyCardManager
dans le contexte de votre application, vous devez indiquer au contexte lequel câbler.
Malheureusement, le @Qualifier
ne fonctionne pas avec les noms de bean, vous devez soit annoter le bean réel avec une balise correspondante @Qualifier
ou ajouter un <qualifier>
à la définition XML du haricot.
Le site @Resource
fonctionne avec les noms de haricots, mais ne supporte pas les paramètres des constructeurs (ce n'est pas la faute de Spring, c'est une erreur d'interprétation). JSR-250 annotation standard avec @Target({TYPE, FIELD, METHOD})
)
Référence :
Dépannage
Si vous ne savez pas pourquoi il y a deux beans du même type dans le contexte, naviguez tout d'abord vers l'interface du bean (je suppose que KeyCardManager
est une interface, sinon, faites la même chose pour la classe de toute façon) et si vous utilisez Eclipse sélectionnez Navigate > Open Type Hierarchy
. Si vous trouvez plus d'une classe concrète qui hérite de KeyCardManager
(y compris KeyCardManager
elle-même), alors c'est probablement là que se situe votre problème.
Si ce n'est pas le cas, vous avez probablement deux beans du même type dans votre contexte d'application. Cela peut se produire lorsque vous définissez un bean à la fois par le biais de XML et de balayage du classpath . C'est-à-dire que si vous avez cette ligne dans votre XML :
<context:component-scan base-package="org.example"/>
Assurez-vous de ne pas câbler manuellement des haricots depuis le org.example
(sinon vous aurez des haricots doubles, ce qui peut conduire au problème que vous rencontrez).