簡體   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