2015-10-07 40 views
0

我在項目A中有一個名爲Customer的bean。在項目B中,我有項目A作爲maven依賴項。Spring Java Config - @Bean重寫Bean定義不起作用

在項目B的Java Config(@Configuration)中,我嘗試獲取一個名爲CustomerImpl的Customer的新實現。

@Bean 
public Customer customer() { 
return new CustomerImpl() 
} 

客戶是這裏的一類。

但我的環境總是有客戶,而不是我想要的CustomerImpl。

當我把一個@Qualifier並在上面的配置中使用該限定符名稱而不是customer()時,它的工作正常。但我不想指定限定符。

+0

客戶是類還是接口? – Andres

+0

客戶是這裏的一個班級。 – user2069929

回答

0

在你的評論中,你說客戶是一個類。

嘗試將customer()方法的返回類型定義爲接口(例如ICustomer),而不是類。使Customer和CustomerImpl都實現該接口。

@Bean 
public ICustomer customer() { 
return new CustomerImpl() 
} 
+0

您是指CustomerImpl as Interface? – user2069929

+0

@ user2069929不,創建一個新接口(例如ICustomer)並使Customer和CustomerImpl類實現該接口。然後更改客戶方法以返回客戶而不是客戶。 – Andres

0

給兩個不同的名稱,例如:

@Bean(name=customerImpl) 
public Customer customerImpl() { 
    return new CustomerImpl() 
} 

並使用該名稱獲取所需的實例,例如,

@Resource(name=customerImpl) 
private Customer customer; 
0

問題已修復。做了2個變化。添加了@Primary並給出了不同的方法名稱

@Primary 
@Bean 
public Customer newMethodName() { 
return new CustomerImpl() 
}