「Spring認証」Spring依存注入

1669 ワード

Javaベースのアプリケーションには、エンドユーザーが見ているワークアプリケーションを表示するために協働するオブジェクトがあります.複雑なJavaアプリケーションを作成する場合、アプリケーションクラスはできるだけ他のJavaクラスとは独立して、これらのクラスを再利用する可能性を高め、ユニットテスト時に他のクラスとは独立してテストする必要があります.依存注入(または結合と呼ばれる場合もある)は、これらのクラスを結合しながら独立性を維持するのに役立つ.
テキストエディタコンポーネントを持つアプリケーションがあり、スペルチェックを指定したいとします.あなたの標準コードはこのように見えます.
public class TextEditor { private SpellChecker spellChecker;
public TextEditor() {
  spellChecker = new SpellChecker();

}}ここでは、TextEditorとSpellCheckerの間に依存項目を作成します.反転を制御する場合、私たちはこのようなことをします.
public class TextEditor { private SpellChecker spellChecker;
public TextEditor(SpellChecker spellChecker) {
  this.spellChecker = spellChecker;

}}ここでTextEditorはSpellCheckerの実現を心配すべきではない.SpellCheckerは独立して実装され、TextEditorがインスタンス化されるとTextEditorに提供されます.プロセス全体をSpringフレームワークで制御します.
ここでは、TextEditorから完全な制御権を削除し、他の場所(XMLプロファイル)に保持し、Class Constructorを介してクラスTextEditorに依存項目(クラスSpell Checker)を注入します.このため、外部システムに依存を効率的に委任しているため、制御フローは依存注入(DI)によって「逆転」されています.
依存項目を注入する第2の方法はTextEditorクラスのSetterメソッドであり,ここでSpellCheckerインスタンスを作成する.この例では、setterメソッドを呼び出してTextEditorのプロパティを初期化します.
従って、DIは2つの主要な変異体に存在し、以下の2つのサブセクションでは、それらを例によって説明する.
いいえ.依存注入タイプと記述1コンストラクション関数に基づく依存注入コンテナが複数のパラメータを持つクラスコンストラクション関数を呼び出すと、コンストラクション関数に基づくDIが完了し、各パラメータは別のクラスへの依存を表す.
2 Setterベースの依存注入SetterベースのDIは,コンテナがパラメータレスコンストラクタまたはパラメータレス静的ファクトリメソッドを呼び出してbeanをインスタンス化した後にbean上のsetterメソッドを呼び出すことによって達成される.
ConstructorとSetterベースのDIを混在させることができますが、コンストラクション関数パラメータを強制依存とsetterをオプション依存として使用するのは良い経験則です.
DIの原則を使用すると、コードがより明確になり、オブジェクトが依存項目を提供する場合、デカップリングがより効果的になります.このオブジェクトは依存項目を検索せず、依存項目の位置やクラスも知らず、Springフレームワークですべてのことを処理します.