春IOCの研究ノート

IOCは、目的は、コンポーネントの依存関係を設定し、これらの依存関係の全体のライフサイクルを管理するための簡単な機構を提供することで、コアDIです。依存関係は、IOC場合に参照されるいくつかのアセンブリは、一般的に従属オブジェクト、またはターゲット・オブジェクトと呼ばれている必要があります。DIと見て、これらはさらにサービスの実装IOCサブタイプに分類されます。IOCは、一般的に2つのサブタイプに分解することができます。私たちは、はっきりについて語るとき、必ずDI(依存ルックもIOCの形である)の話ではない、通常はIOCの話、DIについてIOCを話すとき、この定義で見ることができます。依存、コンテキスト依存のルックアップを引っ張っ:依存性注入、依存関係のIoCコンテナによってアセンブリの注入を使用して参照ルック依存、形成必見の依存関係を使用する場合は、依存ルックアップは2つのタイプがあります。コンストラクタ・インジェクションとセッター注入:依存性注入の2種類があります。以下は、1人の導入
依存プル
依存性プルIOCは、必要に応じて、レジストリの依存関係から抽出された依存プルで最も一般的なタイプです。
春IOCの研究ノート
スプリングは、検索フレームワーク管理コンポーネントとして依存プル機構提供:
パブリッククラスDependencyPull {
パブリック静的無効メイン(文字列[] args){
ApplicationContextのApplicationContextのClassPathXmlApplicationContext新しい新=(「春/ context.xmlにアプリを」);
MessageRenderer = MRのapplicationContext.getBean( "レンダラ"、MessageRenderer.class)に;
mr.render();
}
}
コンテキスト依存ルックアップ
コンテキストおよび依存プル同様のルックアップに依存いくつかの点で趙趙はなく、中央レジストリからよりも、コンテナ資源の管理のために行われ、通常の設定点で行われます。
春IOCの研究ノート
インタフェースを介して、以下の成分を達成するために仕事に依存ルックアップは、このインタフェースを実装することで、コンポーネントは、それが容器の依存関係を取得したいという信号を送ることができます。
インタフェースManagedComponent {公共
ボイドperformLookup(コンテナコンテナ);
}
パブリックインターフェイス{コンテナ
オブジェクトgetDependency(文字列キー);
}
publicクラスContextualizedDependencyLookup実装ManagedComponent {
プライベートDepencyのdepency;
公共ボイドperformLookup(コンテナコンテナ){
this.depency =(Depency)コンテナ.getDependency( "MyDependency");
}

@Override
public String toString() {
    return depency.toString();
}

}
コンテナは、コンポーネントの依存関係に渡す準備ができたら、今度は各成分がperformLookup()メソッドを呼び出し、その後、容器アセンブリは、依存関係を見つけるためにインターフェースすることができる使用します。
コンストラクタ注入
アセンブリコンストラクタ依存性に設けられ、コンストラクタ依存性注入が起こります。まず、アセンブリがコンポーネントのインスタンスに渡され、パラメータなどの1つまたはコンストラクタのセット、およびそのエントリの依存性の生活、依存IOCコンテナ。コンストラクタ・インジェクションを使用する1つの明白な結果には依存関係がオブジェクトを作成することはできません場合、あなたは依存関係を持たなければならないということです。
{クラスConstructorInjectionパブリック
プライベート依存関係の依存;

public ConstructorInjection(Dependency dependency) {
    this.dependency = dependency;
}

@Override
public String toString() {
    return dependency.toString();
}

}
注入セッター
セッター注入で、IOC容器アセンブリの依存関係は、セッターメソッドによって注入することができます。アセンブリ開示されたセッター依存IOC容器の方法を管理することができます。明白な結果の使用セッター注入を使用すると、依存関係なしでオブジェクトを作成することができ、その後、依存関係はセッターを呼び出すことによって提供することができるということです。実際には、セッター注入は、最も広く使用されている射出機構でも最も簡単なIOCメカニズムの一つです。
{クラスSetterInjectionパブリック
プライベート依存関係の依存;

public void SetterInjection(Dependency dependency) {
    this.dependency = dependency;
}

@Override
public String toString() {
    return dependency.toString();
}

}
インジェクションと見つける
あなたが注入またはになります使用する方法を選択することができた場合、質問は今?答えは絶対に注入することです。一方、成分の注射は効果がありません。一方、プルはレジストリへの参照を取得するためのイニシアチブをとると依存関係を取得するために対話する必要があります依存しています。
あなたは、注射を使用する場合は、手動で依存オブジェクトを使用し、完全に別のクラスのIoCコンテナ、IOCコンテナとその協力者を提供するために自由である、しかし、あなたは、検索を使用する場合は、あなたのクラスは常に、コンテナ定義されたクラスやインタフェースに依存しています。別の欠点は、依存関係が適切なコンストラクタまたはセッターを使用して提供することができるので、注射は、それらの容易な組み立てをテストするために使用することができ、独立したテストコンテナクラスを見つけることが困難なことです。
セッター注入とコンストラクタ・インジェクションは
今再び、我々は注射を使用することを選択した質問ですが、選択はセッター・インジェクションまたはコンストラクタ・インジェクションですか?答えは、使用に柔軟である
だけでなく、あなたがコンポーネントを使用する前に、依存クラスのインスタンスを持っていなければならないとき、コンストラクタ・インジェクションは、特に便利ですが、コンストラクタ・インジェクションを使用している場合、あなたは従属需要品目の声明を経由してコンテナに関連していなくてもよいですコンストラクタ・インジェクションも不変オブジェクトを使用することに貢献しています。
セッター・インジェクションは、さまざまな状況で有用です。コンポーネントがコンテナにその依存関係を公開し、そして自分自身のデフォルト値を提供するために満足している場合は、セッター注入は、通常、これを達成するための最良の方法です。セッター注入のもう1つの利点は、この方法は、従来の方法に有用ではないですが、それは、インターフェイスステートメントの依存を可能にすることです。セッタ注入はまた、親コンポーネントの新しいインスタンスを作成することなく、異なる実装の依存関係のリアルタイム交換を可能にします。SpringのJMXサポートは、この機能を可能にします。おそらく、セッター注入の最大の利点は、それが少なくとも侵入における射出機構であるということです。
一般に、注射は、使用の種類に応じて選択されるべきです。新しいオブジェクトを作成せずにセッターベースの依存性注入の交換を可能にし、また、明示的に移植されたオブジェクトを使用せず、クラスの適切なデフォルト値を選択できるようにすることができます。それは依存関係がコンポーネントに渡されていることを確認し、不変オブジェクトのコンストラクタ・インジェクションを設計することが望まれる場合には良い選択です。

おすすめ

転載: blog.51cto.com/14760318/2481354