2017-05-31 9 views
0

私は、WordDaoという名前の抽象クラスのインプットであるWordDaoというインターフェースを持っています。そして、いくつかのimplクラスはその抽象クラスを拡張します。feign change春の自動優先順位

私はそれらを注入するときに同じ変数名を使用します。

例:私はふりを追加する前に

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

@Autowired 
private WordDao subjectService; 

すべてがうまくいきます。私の仲間のクライアントは、WordDaoを拡張するインターフェースです。このような

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

今、すべての私の@Autowiredクラスは装うクライアントを注入しています。 autowired result

私はfeignクライアントから「extend WordDao」を削除しようとしましたが、もううまく機能しますが、理由はわかりません。

私の質問です:注入時にフェイングが最優先されますか? spring @autowiredが名前でクラスを選択していないのですか(変数とクラス/コンポーネント名を一致させようとしますか?)

答えて

1

FeignClient beansは@PrimaryでBeanを定義するとprimaryに設定されます。おそらく、FeignClient Beanが優先順位で設定されているのでしょう。幸いにもそれはからspring-cloud-netflix 1.3.0まで設定可能です。 Dalstonリリースで使用できます。

下記のようにコードを変更してください。あなたが注意しなければならない

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

ことの一つは、あなたが、フォールバックの実装でFeignClientを使用しているとき、主は通常必要とされていることです。フォールバックの実装もSpring Beanでなければなりません.FeignClientとフォールバックの2つの実装が存在します。

これが役に立ちます。

+0

どのように2つのインプラントの問題を解決するための任意のアイデアですか?私は "同じ変数名"を使用しようとしましたが、運はありませんでした。春はまだ2つのimplを訴え、サーバーを起動できません – user1686407

関連する問題