私は約50のコンポーネントを含むSpringプロジェクトを持っています。残念ながら、クラスの1つがMavenで循環依存性の問題を引き起こしました。その話があります:SpringプロジェクトのMaven循環依存関係の問題
私は新しいコンポーネントをSpringプロジェクトに追加しました。今のところApple
としましょう。それはAppleWatch
と呼ばれる@Bean
を持っています。実装の1つは、Apple
が別のコンポーネントに(依存元)に住んでいたということであった:AppleWatch
はビーンのメソッドを呼び出すことができるように、Foxconn
CheapLabor
と呼ばれます。 Corning
:その間で
は、CheapLabor
は別のコンポーネントに依存していました。残業をするにはGorillaGlass
が必要でした。瞬間Corning
が、それはAppleの市場ニーズに応じてガラスの同様の量を作ることによってお金を節約したいことを実現するまで
物事はかなり良好でした。したがって、メソッドを呼び出すことを試みますgetCurrentMarketOrders()
AppleWatch
そうするために、私はクラスGorillaGlass.java
に豆AppleWatch
をautowiredしました。次に...
ブーム!循環依存性エラー!
だから、私はApple
および/またはCorning
のために何をすべきか上の任意の提案?
通常のアドバイスは、実装ではなくインターフェイスに依存することです - 私はそれがここで助けになると思います。また、あなたの依存関係の方向性について考えてみてください。例えば、私はガラスの結晶に応じて時計を見ることができますが、それ以外の方法はありません。あなたのGorillaGlassクラスはAppleWatchに依存しているように思えます。私は頭を悩ませますが、おそらく私はこの問題を誤解しています。 – unigeek
これはビルド時間エラーかランタイム(ユニットテストを含む)エラーですか? –
@unigeek私は同意します。プロジェクトの構造を再設計することは、問題を解決します。しかし、私の上司/同僚を夢中にさせることなく構造を変えることができなかったことが判明しました。サイクリック依存関係の問題を解決するには、多くのアプローチがあります。 「コーニング」が「アップル」に依存しているという論理を「アップル」に移す代わりに、「アップル」から必要な情報を入手するのではなく、「コリング」が「フォックスコン」の情報を取得するようになったこれはAppleのメソッドを呼び出します。サークルを「Apple」 - >「Foxconn-> Corning」に分割する。最高の動きではなく、機能しました。 –