[英]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.