1.概念の理解
- 依存性注入
- 誰注入?依存オブジェクト注入IoCコンテナを。
- 制御の反転
- 誰がコントロール?どのようなコントロール?IoCコンテナ制御オブジェクト、制御は、注入された従属オブジェクトを作成します。
- なぜそれが逆と呼ばれていますか?作成、IoCコンテナ一元管理へのプログラマの主観的願望を超える噴射制御をターゲットにしています。
オブジェクト間の依存関係2.伝統的な方法を構築します
パブリック クラスDvdPlayMissionImpossible { プライベートMissionImpossibleCd missionImpossibleCd。 パブリックDvdPlayMissionImpossible(){ この .missionImpossibleCd = 新しいMissionImpossibleCd()。//紧耦合 } 公共 ボイドプレイ(){ System.out.printlnは( "一台只能看" + missionImpossibleCd.getCompactDiskName()+ "的DVD" ); } } パブリック クラスDvdPlayFurious { プライベートFuriousCd furiousCd。 パブリックDvdPlayFurious(){ この .furiousCd = 新しい FuriousCd()。//紧耦合 } 公共 ボイドプレイ(){ System.out.printlnは( + furiousCD.getCompactDiskName()+ "DVD" "一つだけ見ることができます" ); } } パブリック クラスMissionImpossibleCd { パブリック文字列getCompactDiskName(){ 戻り "不可ミッション" 。 } } パブリック クラスFuriousCd { パブリック文字列getCompactDiskName(){ リターン "速度と情熱" ; } } // 従来の方法。 @Test 公共 ボイド dvdPlayerMissionImpossibleTest(){ dvdPlayMissionImpossible dvdPlayMissionImpossible = 新しい新 DvdPlayMissionImpossible(); DvdPlayFurious dvdPlayFurious = 新新DvdPlayFurious(); dvdPlayMissionImpossible.play(); // 1が唯一のミッションインポッシブルDVD見ることができます dvdPlayFurious.playを(); // 1のみワイルドスピード見ることができますDVD }
オブジェクト間の依存関係3. DIの道を構築
- すべてがそうCompactDiskインタフェースに抽象化、CDの映画の名前を持っています。
パブリック インターフェースCompactDisk { ストリングgetCDName()。 } @Component パブリック クラス MissionImpossibleが実装CompactDisk { @Override パブリックストリングgetCDName(){ リターン "碟中谍" 。 } } @Component パブリック クラス激怒は実装CompactDisk { @Override パブリックストリングgetCDName(){ リターン "速度与激情を" 。 } }
- すべてのDVDプレーヤーでは再生する機能を持っているので、MediaPlayerのインタフェースに抽象化。
パブリック インターフェイスのMediaPlayer { 無効遊び(); } @Component パブリック クラス DVDプレーヤが実装MediaPlayerの{ @Autowired @Qualifier( "missionImpossible" ) プライベートCompactDisk CDを、 @Override 公共 ボイドプレイ(){ System.out.printlnは( "一台可以看" + cd.getCDName()+ "的DVD" ); } } @Component パブリック クラス VCDPlayerは実装MediaPlayerの{ @Autowired @Qualifier( "激烈") プライベートCompactDisk CD; @Override 公共 ボイドプレイ(){ System.out.printlnは( + cd.getCDName( "1が見ることができる")+ "VCD" ); } }
- ユニットテスト
@Autowired DVDプレーヤDVDプレーヤ、 @Autowired VCDPlayer VCDPlayer; // DIウェイ。 @Test 公共 ボイドdvdAndVcdPlayerTest(){ dvdPlayer.play(); // 一方はミッションインポッシブルDVD見ることができる vcdPlayer.playを(); // A VCDは、スピードと情熱を見ることができます }
4. DIの利点
- オブジェクト間のデカップリング、すべての後に、1だけのムービープレーヤーを参照することができ、私は人々がそれを買うために喜んでいるとは思いません。
- 同じオブジェクトは、IoCコンテナは一つだけを作成する必要があります。
- IoCコンテナを使用すると、自動的にオブジェクト間の複雑な依存関係を一致させるのに役立ちます。
5.参考文献
- https://www.iteye.com/blog/jinnianshilongnian-1413846
- https://www.zhihu.com/question/23277575/answer/169698662
- 第二章「本当の春」