2017-09-28 4 views
-1

spring zuulで定義されたRibbonRoutingFilter Beanをオーバーライドしようとしているときにこの問題が発生しました。強調するために、私は、同じタイプのBeanを作成するだけでなく、オーバーライドしています。ですから、私はzuulの "ribbonRoutingFilter" beanをまったく登録しないことを望みます。Javaのコンフィグレーションでspring beanをオーバーライドする方法

私は自分で実装しています。私が試した最初のことは、@componentアノテーションを使い、依存関係をautowireしました。コンストラクタにブレークポイントを追加しましたが、決して呼び出されませんでした。だから私は私の定義がzuulよりも早くロードされなければならないことに気付きます。そこで@Configurationアノテーションと@Order(Ordered.HIGHEST_PRECEDENCE)という設定クラスを作成し、そこで@Beanアノテーションを使用してクラスをインスタンス化しました。それでも、私の方法は常に先に読み込まれます。

答えて

0

コンフィグレーションクラスの定義をロードするとき、そしてオーバーライドが発生するときに、Springが次の順序をとっていることが判明しました。クラスorg.springframework.context.annotation.ConfigurationClassParserには、メソッドdoProcessConfigurationClass()に詳細なロジックがあります。私は私の簡素化、集計や、ここで発注ルールあげるよ:それに定義されたすべてのクラスがあり

  1. あなたの場合はアプリケーションクラス(main()メソッドが定義されている)、彼らが解析され、その中の定義は
  2. を最初に登録されています
  3. それが登録豆@Componentとして定義され、@Configurationクラス
  4. で定義されたであろう、それは@import
  5. によって導入された定義が追加され、それは@ImportResource
  6. によって導入された定義が追加され、その後@Beanから定義を追加アプリケーション内部のメソッドclあなたがアプリケーションクラスが拡張している親クラスについて上記と同じ手順を実行してみてください。
  7. 次に、インターフェイスのデフォルトメソッドから(私はそれがJava 8だと思います)

これは、オーバーライドが機能しない理由を説明したものです。しかし、私が試したことはすべてステップ2にあります。しかし、ステップ3の@Importでbeanを定義しました。

私の問題を解決するために、そこにアプリケーションクラスに@Bean注釈付きメソッドを追加して実行しました。インスタンス化とオーバーライドはちょうど期待通りに起こります。

上記の要約は正確ではないかもしれませんが、あなたの上書きに失敗した可能性のあるものについての考えを与えるだけです。特定のユースケースを試しているときは、ConfigurationClassParserをデバッグする方がよいでしょう。

+0

あなた自身の質問に答えるには、Stack OverflowのQ&Aフォーマットに従ってください。これは答えではありません。 –

+0

答えを正しいボックスに移動しました。 – FTP

関連する問題