我遇到了一些 Spring bean 定义的问题。我的 main() 方法正在加载几个上下文 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") 注解。dao 在其他类中被引用,如下所示:
...
private @Autowired @Qualifier("converterDAO") ConverterDAO converterDAO;
...
我希望一个 DAO 覆盖另一个 DAO 的定义,正如我一直理解的那样,这是首先使用 DI 框架的主要原因之一。多年来,我一直在使用 xml 定义来执行此操作,并且从未遇到任何问题。但组件扫描和带注释的 bean 定义不是这样吗?Spring 说它们不“兼容”是什么意思?它们实现了相同的接口,并且它们被自动装配到该接口类型的字段中。为什么他们不兼容?
有人可以为我提供一种方法,让一个带注释的组件扫描 bean 覆盖另一个吗?
-麦克风