依存関係の挿入 (DI) は、アプリケーションの管理とテストを容易にするために、プログラミング コードから依存関係を削除する設計パターンです。依存関係の注入により、プログラミング コードが疎結合になります。 DI をより深く理解するために、まず依存関係ルックアップ (DL) について理解しましょう。
依存関係の検索
依存関係ルックアップは、要求に応じてリソースを取得するアプローチです。リソースを取得するには、次のようなさまざまな方法があります。
A obj = new AImpl();
このようにして、new キーワードによってリソース(A クラスのインスタンス)を直接取得します。別の方法はファクトリーメソッドです。
A obj = A.getA();
このように、静的ファクトリ メソッド getA() を呼び出してリソース (A クラスのインスタンス) を取得します。
あるいは、次のように JNDI (Java Naming Directory Interface) によってリソースを取得できます。
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ファイルなどの外部からコンストラクタまたはセッターメソッドで提供されます。
Spring フレームワークで依存性注入を実行する 2 つの方法
Spring Framework は依存関係を注入する 2 つの方法を提供します
- コンストラクター別
- Setterメソッドによる
Spring dependency Injection の今後のトピック
コンストラクターによる依存関係の注入コンストラクターによって依存関係を注入する方法を見てみましょう。
setter メソッドによる依存関係の注入
setter メソッドで依存関係を注入する方法を見てみましょう。