2017-03-24 68 views
0

我是新來的溫泉,所以如果我的問題是愚蠢的,請不要介意的Spring bean實現兩個接口

我有實現兩個接口

public class AAA implements BBB, CCC { 

} 

public interface BBB { 
    void method BBB_method(); 
} 


public interface CCC { 
    void CCC_method(); 
} 

我定義的語境bean對象類類如下:

public class Context { 

    @Bean 
    public BBB myObject(){ 
     return new AAA(); 
    } 

    @Bean 
    public CCC myObject(){ //Issue is here 
     return new AAA(); //Duplicate API name not allowed 
    } 
} 

我已經自動連接在2個不同類的豆類如下:

@Autowired 
private BBB myObject; 

@Autowired 
private CCC myObject; 

什麼應該是自動裝配這個並在Context類中定義bean的最佳方式?在Context.java中定義2個bean對象是否有意義?如何解決這種情況,我希望我的bean被自動裝配到兩個不同的接口(和對象名稱是相同的..在我的情況下,它的myObject)?非常感謝您的回覆。謝謝 !

回答

0

您錯過了一點,您不需要與參考變量名稱相同的方法名稱,即您不需要方法名稱爲myObject

Spring容器只是試圖找到依賴關係的實現類,如果它們被發現,它們將被注入到Autowired字段(引用變量名稱無關緊要,只是它們的類型,即類名稱很重要)。

在你Context類,不能定義兩種方法具有相同簽名的,所以他們改變名稱如下所示:

public class Context { 

    @Bean 
    public BBB bObject(){ 
     return new AAA(); 
    } 

    @Bean 
    public CCC cObject(){ 
     return new AAA(); 
    } 
} 
0

春天他們的名字解析豆,因爲在運行時它couldn」從你的bean聲明中獲取方法返回類型。

所以解決問題的最佳方式 - 自動裝配的時候,如果有ambiguaty春季不能默認使用指定bean名稱解析它只是指定了不同的bean聲明的方法名稱(bbbObject和cccObject例如)

Qualified註釋。