![](/img/trans.png)
[英]Spring ConflictingBeanDefinitionException conflicts with existing, non-compatible bean definition of same name and class
[英]ConflictingBeanDefinitionException : Same class name, different package
我在一个包裹中有一个岛:
package com.mypackage.dao;
@Repository
public class MyDao {
// some code here
}
我在子包中有另一个具有相同类名的dao:
package com.mypackage.one.dao;
@Repository
public class MyDao {
// some other code here
}
我在第三类中尝试使用自动装配来注入bean:
import com.mypackage.one.dao;
public class TestClass{
@Autowired
private MyDao myDao;
}
部署时,出现以下错误:
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'myDao' for bean class [com.mypackage.dao.MyDao] conflicts with existing, non-compatible bean definition of same name and class [com.mypackage.one.dao.MyDao]
我的applicationContext.xml具有:
<context:component-scan base-package="com.mypackage.dao"/>
<context:component-scan base-package="com.mypackage.one.dao"/>
我不能将这些类重命名为其旧版应用程序。
解决方案是什么?
我尝试使用限定符,但这不起作用。
在以下行中添加:
<bean id="oneMyDao" class="com.mypackage.one.dao.MyDao" />
并将自动装配更改为:
@Autowired
@Qualifier("oneMyDao")
private MyDao myDao;
但是它仍然抛出相同的错误。
我认为您为同一bean混合XML和Java bean配置。 您的代码应该是这样的
package com.mypackage.dao;
@Repository
@Qualifier("myDAOBasePackage")
public class MyDao
{
// some code here
}
package com.mypackage.one.dao;
@Repository
@Qualifier("myDAOSubPackage")
public class MyDao {
// some other code here
}
使用此注入
@Autowired
@Qualifier("myDAOBasePackage")
private MyDao myDao;
我认为问题在于bean的定义。 您必须给您的豆起不同的名字。
请尝试更改注释@Repository("dao1")
的第一道和@Repository("dao2")
第二道。 然后尝试使用@Qualifier("dao1")
或@Qualifier("dao2")
来@Autowire
bean。
您也应该删除此行
<bean id="oneMyDao" class="com.mypackage.one.dao.MyDao" />
如果使用@Repository
批注
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.