English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring 依存注入

依存注入(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つの方法

Spring フレームワークは依存項の注入方法を2種類提供しています

コンストラクタを通じて setter メソッドを通じて