J'ai un problème avec certaines définitions de Spring bean. J'ai quelques fichiers xml de contexte qui sont chargés par ma méthode main(), et les deux contiennent presque exclusivement une balise. Lorsque ma méthode principale démarre, j'obtiens cette erreur de Spring :
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'converterDAO' for bean class [my.package.InMemoryConverterDaoImpl] conflicts with existing, non-compatible bean definition of same name and class [my.other.package.StaticConverterDAOImpl]
Les deux classes DAO sont annotées de cette manière :
@Repository("converterDAO")
public class StaticConverterDAOImpl implements ConverterDAO {
...
}
Le dao en mémoire possède également l'annotation @Repository("converterDAO"). Le dao est référencé dans d'autres classes comme celle-ci :
...
private @Autowired @Qualifier("converterDAO") ConverterDAO converterDAO;
...
Je veux qu'un DAO remplace la définition de l'autre, ce qui, d'après ce que j'ai toujours compris, est l'une des principales raisons d'utiliser un cadre DI en premier lieu. Je fais cela avec des définitions xml depuis des années et je n'ai jamais eu de problèmes. Mais ce n'est pas le cas avec les scans de composants et les définitions de beans annotées ? Et que veut dire Spring lorsqu'il affirme qu'ils ne sont pas "compatibles" ? Ils implémentent la même interface, et ils sont autowired dans les champs qui sont de ce type d'interface. Pourquoi diable ne sont-ils pas compatibles ?
Quelqu'un peut-il me fournir un moyen pour qu'un haricot annoté et balayé par des composants puisse en remplacer un autre ?
-Mike