我在一个包中有一个dao:
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;
但它仍然会引发同样的错误。
答案 0 :(得分:1)
我认为你为同一个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;
答案 1 :(得分:0)
我认为问题在于bean的定义。你必须给你的豆子命名不同。
请尝试将注释更改为第一个dao的@Repository("dao1")
和第二个dao的@Repository("dao2")
。然后使用@Autowire
或@Qualifier("dao1")
尝试@Qualifier("dao2")
bean。
你也应该删除这一行
<bean id="oneMyDao" class="com.mypackage.one.dao.MyDao" />
如果您使用@Repository
注释