English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
依存注入(DI)は、依存をプログラミングコードから削除して、アプリケーションの管理とテストを簡単に行うためのデザインパターンです。依存注入は、プログラミングコードを緩やかに結びつかせます。DIをよりよく理解するために、まず依存関係の検出(DL)を理解しましょう:
依存関係の検出は、要件の後でリソースを取得する方法です。例えば、リソースを取得するためにはさまざまな方法があります:
A obj = new AImpl();
このように、newキーワードを通じて直接リソース(Aクラスのインスタンス)を取得できます。もう一つの方法は工場メソッドです:
A obj = A.getA();
このように、静的工場メソッドgetA()を呼び出してリソース(Aクラスのインスタンス)を取得します。
または、JNDI(Java命名ディレクトリインターフェース)を通じてリソースを取得できます。 :
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup("java:comp"/env"); A obj = (A)environmentCtx.lookup("A");
リソースを取得するためには、さまざまな方法があります。この方法の問題を見てみましょう。
主に依存関係の検出における2つの問題があります。
密接な結びつき: 依存関係の検出方法はコードを密接に結びつかせます。リソースが変更された場合、コードには多くの修正が必要です。 テストが難しい: この方法はテストアプリケーションを実行する際に多くの問題を引き起こします。特にブラックボックステストでは問題が多いです。
依存注入は設計パターンであり、プログラムを除去します。この場合、外部ソース(例えば XML ファイル)からの情報を提供します。これにより、コードが緩やかに結合され、テストが容易になります。この場合、コードは以下のように書かれます:}}
class Employee{ Address address; Employee(Address address){ this.address = address; } public void setAddress(Address address){ this.address = address; } }
この場合、Address クラスのインスタンスは外部ソース(例えば XML ファイル)からコンストラクタまたはsetterメソッドを通じて提供されます。
Spring フレームワークは依存項の注入方法を2種類提供しています
コンストラクタを通じて setter メソッドを通じて