logo

Spring での依存関係の注入

  1. Spring での依存関係の注入
  2. 依存関係の検索
  3. 依存関係の注入

依存関係の挿入 (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 メソッドで依存関係を注入する方法を見てみましょう。