最佳答案
我对一些 Spring bean 的定义有疑问。我有两个用 main ()方法加载的 context xml 文件,它们几乎都包含一个上下文: 元件扫描标记。当我的 main 方法启动时,我从 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]
这两个 DAO 类都是这样注释的:
@Repository("converterDAO")
public class StaticConverterDAOImpl implements ConverterDAO {
...
}
内存中的 Dao 也有@Repository (“ ConverterDAO”)注释:
...
private @Autowired @Qualifier("converterDAO") ConverterDAO converterDAO;
...
我希望一个 DAO 覆盖另一个 DAO 的定义,正如我一直理解的那样,这是首先使用 DI 框架的主要原因之一。多年来,我一直在使用 xml 定义来完成这项工作,从未遇到过任何问题。但是组件扫描和带注释的 bean 定义就不是这样了吗?Spring 说它们不“兼容”是什么意思?它们实现相同的接口,并且自动连接到属于该接口类型的字段中。为什么他们不合适?
有没有人能提供一种方法,让一个带注释的组件扫描 bean 覆盖另一个?