2017-06-16 22 views
0

我有一個包道:ConflictingBeanDefinitionException:相同的類名,不同的封裝

package com.mypackage.dao; 

@Repository 
public class MyDao { 
// some code here 
} 

我有一個子包相同的類名的另一個道:

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

我認爲問題在於bean的定義。你必須給你的豆不同的名字。

請嘗試將第一個dao的註釋更改爲@Repository("dao1"),第二個dao更改註釋@Repository("dao2")。然後使用@Qualifier("dao1")@Qualifier("dao2")嘗試@Autowire豆。

此外,如果你使用@Repository註解

1

你應該刪除此行

<bean id="oneMyDao" class="com.mypackage.one.dao.MyDao" /> 

我覺得你的混合XML和同一個bean的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 
    } 

UES此注入

@Autowired 
@Qualifier("myDAOBasePackage") 
private MyDao myDao; 
相關問題