我在一个包中有一个 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
}
我有第三堂课,我试图使用 Autowiring 注入(inject) 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" />
并将 Autowiring 更改为:
@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
}
用它来注入(inject)
@Autowired
@Qualifier("myDAOBasePackage")
private MyDao myDao;
关于java - ConflictingBeanDefinitionException : Same class name, 不同的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44586087/