繁体   English   中英

ConflictingBeanDefinitionException:相同的类名,不同的包

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM