DI依存性の注入は、依存性の注入は
、継承:です。
従属メンバ変数、:持っています。
例:
class Teacher {
private Phone phone; //Teacher 类依赖Phone 类
...
public Teacher(){
this.phone = new Phone();
}
}
このコードは、次の質問で見つけることができます:
(1)私は、このような新しい電話番号(文字列名)などの電話発生手段を、変更したい場合は、電話番号を初期化するために、私はコードブロックの教師を変更するつもりだ、この時間を。
(2)あなたが別の電話オブジェクト、教師に大きな影響をテストする場合は、初期化電話がコンストラクタ教師の中で死んで書かれていたので、
依存性の注入上記は、ハードのinit方法を初期化するために、コンストラクタに直接依存します欠点は、2つのクラスが十分に独立した、便利なテストではないということです。次のように我々はINIT別の方法は、あります:
パブリッククラス教師{
...
電話電話。
...
公共先生(電話電話){
this.phone =電話。
}
}
上記のコードは、我々はコンストラクタにパラメータとして渡されたオブジェクトに電話します。電話に外部の先生のコンストラクタを呼び出す前に、オブジェクトを初期化されます。このように自分自身のイニシアチブに依存し、道の対外依存度を通過する非初期化され、我々は、依存性注入と呼ばれます。
:今、私たちは1の存在下で、上記の二つの問題は良い解決策であることを見つけ、単に依存性注入は、2つの主な利点がある
(1)デカップリング、依存間のデカップリングを。
(2)それが切り離されている、特にモックをテスト、ユニットテストを実行するのが便利です。
依存性:オブジェクトが他のオブジェクトを使用する必要が
注入:方法注入の三種類が通常あり、コンストラクタ注入インタフェース注射、注入法、例えば、別のオブジェクトインスタンスはセッターメソッドを介して提供さがある上に。
図1に示すように、ターゲットクラスは
BookServiceをインタフェースと実装クラスが作成され、
インタフェースおよび実装クラスのBookDaoを作成した
書き込みXMLファイルに
書き込みテストクラス
インタフェースと実装クラスのBookDao
インタフェースと実装クラスのBookServiceを
XMLファイルの
テスト
結果