1.デザインの原則
設計では、我々はあなたが成層、抽出の公開部分のサイクルの公開部分に頼る必要があり、循環依存関係のシナリオが発生しないようにしてください、その後、公開部分に依存しています
2、依存典型的なサイクル
しかし、あまりにも多くの特定の事業との間にお互いを呼び出すことにより、常に依存の純登場サイクルを通していくつかのスリップがありますが、あなたは@Autowired依存性注入を使用する場合、プログラムが正常に実行することができます。コンストラクタ依存性注入を使用している場合、彼らはBeanを作成することはできませんので、それは、通常の操作ではありません
3、最後に依存するものです
依存性は、簡単に言えば、ロジックを実行するためにBに方法Aを使用することですが、あなたはA、Bを使用する必要がある場合、この依存性が強いか、弱い依存依存していることを決めました
4、強い依存性
出力AはB、Aは、類推生成することができなくなりません、あなただけではないことはできませんが、Bの上に関与する必要があります
コンストラクタへの依存のサイクルがBeanを作成することはできませんので、コンストラクタ・インジェクションが強く依存している、Spirngは、新しいオブジェクトから抜け出すことができませんでした
5、弱い依存
AがBに参加する必要が出力され、何のB、Aも製造することができ、アナロジーはありません、あなたはケーキの上のあなたのアイシングを持つことができません
@Autowiredフィールド注入はSpirng新しいオブジェクトを出すことができ、弱い依存性なので、プロジェクトが開始することができます
これは、通常、それを強制することはできません?はい、あなたは循環依存関係の調停だったので、なぜ、それができ、正常に実行されていない理由に立っています
6、調停に頼るhttp://mobile.zyyyzz.com/鄭州群衆病院
何調停に依存していることは、調停に依存するが、循環依存の問題を解決することであり、彼は調停DIの実装に依存しています
7、春どのようにコンストラクタデカップリング - 春の依存性注入モデル
1、コンストラクタ、分析強い依存性(引数なしで通常のコンストラクタ)を呼び出して、クラスのインスタンスを作成します
図2は、フィールド/ GetterSetterアノテーション関連噴射に係る弱い依存性を解決するために、依存し、注射を必要とするすべてのクラスを埋めます
図3に示すように、実際のサービスロジックの初期化を行う初期化方法(例えば、ノートまたはafterPropertiesSetの@PostConstruct InitializingBean法)ライフサイクルを呼び出します
このように、クラスを構築するための唯一の責任を弱体化に元3のコンストラクタ関数。クラス構成とDI、ライフサイクルの初期化ロジッククラスに引き渡さ。
このように、私たちは仕事が創出豆ベースのコンストラクタ・インジェクションの作業には影響しません入れ、調停強い依存性は相容れない問題によって引き起こされます
8、非定型循環依存シーン
上記の理解によると、同様に循環依存限り、それへのフィールド注入コンストラクタが存在する場合@Autowired
しかし、実際には、オーダー豆の建設も循環依存を引き起こす可能性が@Autowiredフィールドと調停に注入することができません
円形構造クラスが表示され依存している場合、この状況が発生する可能性があり、仲介することはできません
クラスの設定があり、その完全な設定にロードされなければならないので、その構成のクラスに依存するすべて解決するために豆の彼自身の定義をロードします
基本的に、豆に強く依存しているコンフィギュレーション・クラスで定義されているので、この時間は、強い依存性があり、これはなぜ推奨される構成クラスのコンストラクタ・インジェクションの理由で、彼は依存性のサイクルに終止符を打つことができ、デザインに仲介することはできません彼のクラス構成を露呈しました。