java - ConflictingBeanDefinitionException : Same class name, 不同的包

标签 java spring

我在一个包中有一个 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/

相关文章:

java - Android Java 是否支持泛型类型的原始类型参数?

java - 如何获取 JFrame 中特定布局位置的组件

java - SpringMVC、null spring beans、servlet 和 Apache Thrift

java - 为什么 ${} 变量在我的上下文文件中没有被解释为构造函数参数值?

java - maven简单项目中springApplication中的IllegalAccessError

java - 在 spring 中用 mockings 替换深层次的 Autowiring 依赖

java - 设置 SUBREPORT_DIR > 默认值表达式后无法加载子报告

java - 读写对象字段

spring - Grails 3 Spring 安全插件

java - 获取数组列表的数组列表中的项目