2017-05-31 99 views
0

我有一個叫做WordDao的接口,叫做WordDaoImpl的抽象類impl。而一些impl類擴展了這個抽象類。假裝改變spring autowired的優先級

我使用相同的變量名稱,當我注入它們。

例如:

@Component("subjectService") 
public class SubjectDaoImpl extends WordDaoImpl; 

@Autowired 
private WordDao subjectService; 

一切運作良好之前我添加假死。我的假客戶端是一個擴展WordDao的接口。

這樣的:

@FeignClient("Noun") 
public interface NounClient extends WordDao; 

現在我所有的@Autowired類是注射佯客戶端。 autowired result

我試圖從我的假客戶端中刪除「擴展WordDao」,它再次運行良好,但我不知道爲什麼。

我的問題是:假裝注射時是否優先考慮?是不是春天@autowired按名稱選擇impl類(嘗試匹配變量和類/組件名稱)?

回答

1

FeignClient bean設置爲primary就像您定義的豆一樣使用@Primary。可能這就是爲什麼FeignClient bean被優先設置的原因。幸運的是,它可以從配置spring-cloud-netflix 1.3.0。您可以使用Dalston發佈。

請嘗試更改您的代碼,如下所示。

@FeignClient(name = "Noun", primary = false) 
public interface NounClient extends WordDao; 

你應該小心的一件事是,當使用FeignClient與fallback實現時,通常需要primary。 Fallback實現也應該是spring bean,會存在兩個實現 - 一個來自FeignClient,另一個來自回退。

希望這有助於。

+0

有關如何解決兩個impl問題的任何想法?我試過使用「相同的變量名」,但沒有運氣。春天仍然抱怨兩個impl,並沒有啓動服務器 – user1686407