依存関係の解決がクラス自体ではなく外部エージェントによって行われる場合、それは依存性注入として知られています。
Spring フレームワークでサポートされている依存性注入には、コンストラクター引数を使用する方法とセッター メソッドを使用する方法の XNUMX つの標準的な方法があります。
前者のタイプの依存性注入は、 コンストラクタ 後者はセッター注入として知られています。 どちらの方法もさまざまな目的に使用され、それぞれに長所と短所があります。
主要な取り組み
- コンストラクター インジェクションにより、すべての依存関係を含む完全なオブジェクトの作成が保証されます。 セッター注入により、部分的なオブジェクトの作成が可能になります。
- コンストラクター注入は不変性を促進します。 セッター注入により、変更可能なオブジェクトが可能になります。
- コンストラクター インジェクションは循環依存を防ぎます。 setter インジェクションは、循環依存関係につながる可能性があります。
コンストラクター注入とセッター注入
コンストラクター注入は、Spring フレームワークの依存性注入の一種であり、コンストラクターを使用して依存性を注入します。 セッター注入は、セッター メソッドを使用して依存関係を注入する、Spring フレームワークの依存性注入の一種です。 部分的な依存関係を注入でき、より柔軟です。

コンストラクター注入は、Spring フレームワークの依存性注入の一種であり、コンストラクターを使用して依存性を注入します。 いずれかのクラスに必要な依存関係は、その特定のクラスのコンストラクターのパラメーターとして指定されます。
コンストラクター注入では、すべての依存関係の準備が整っていない限り、開発者はオブジェクトを構築できません。したがって、依存関係注入が成功することが保証されます。
セッター注入は、セッター メソッドを使用して依存関係を注入する、Spring フレームワークの依存関係注入の一種です。 これには set XYZ () 形式のセッター メソッドがあり、XYZ は依存オブジェクトをクライアントに挿入する依存関係を示します。
依存関係を解決するこの方法は、Spring フレームワークでは非常に一般的です。
比較表
比較のパラメータ | コンストラクターのインジェクション | セッターインジェクション |
---|---|---|
注入された依存関係 | コンストラクターを使用します。 | セッターメソッドを使用します。 |
読みやすさ | セッターに比べて読みにくいです。 | それはより読みやすいです。 |
プロパティをオーバーライドする | 依存関係をオーバーライドできません。 | 特定の依存関係をオーバーライドできます。 |
変更 | 常に新しい Bean インスタンスを作成します。 | 新しい Bean インスタンスは作成されません。 |
不変性 | 不変性をサポートします。 | サポートしていません。 |
コンストラクター インジェクションとは
コンストラクター注入は、Spring フレームワーク内で依存関係を解決する標準的な方法の XNUMX つであり、クラスのコンストラクターにパラメーターとしてそれらを割り当てることにより、クラスに必要な依存関係のリストを静的に定義します。
依存関係を必要とするすべてのクラスは、その内部にパブリック コンストラクターを持たなければなりません。パブリック コンストラクターは、コンストラクターの引数としてインスタンスを受け取り、そのコンストラクターは必ずそのクラス内の唯一のパブリック コンストラクターである必要があります。
複数の依存関係が必要な場合は、追加の引数を同じコンストラクターに追加する必要があります。 依存関係が完全に注入されるようにするには、メンバーが XNUMX つのことだけを行う必要があるという単一責任の原則に従う必要があります。
クラスのコンストラクターをより高速で信頼性の高いものにするために、コンストラクターを他のロジックから解放する必要があります。
コンストラクター注入の重要な事実の XNUMX つは、すべての依存関係の準備が整っていない限り、オブジェクトが構築されないことです。 コンストラクターが呼び出されるたびに新しいインスタンスが作成されるため、オーバーライドはできません。
コンストラクター インジェクションは基本的に、すべての依存関係を持つオブジェクトを作成する必要がある場合に使用されます。これは、依存関係を正しく実装するための最も適用可能で簡単な方法です。

セッター注入とは?
Setter インジェクションは、Spring フレームワーク内で依存関係を解決する標準的な方法の XNUMX つであり、setter メソッドを使用して依存関係を解決します。 セッター メソッドは set XYZ () の形式で、XYZ は注入する必要がある依存関係を指定します。
このタイプの注入方法では、最初にオブジェクトが作成され、その後依存関係が注入されます。Spring の構成には XML ファイルが使用されるため、読みやすさが大きな懸念事項となります。
セッター メソッドには指定された形式のメソッド名があるため、さまざまな点で可読性が向上します。 より多くの依存関係を注入する必要がある場合は、セッター注入タイプが非常に好まれており、他のタイプの注入方法よりも優先されます。
さらに、セッター注入を使用すると、毎回新しい Bean インスタンスを作成する必要がないため、開発者は値を簡単にオーバーライドして変更できます。 セッター注入の唯一の欠点は、完全な依存関係の注入が保証されないことです。
特定のオブジェクトに依存関係が挿入されているかどうかは保証されません。 つまり、依存関係が不完全なオブジェクトが存在する可能性があることを意味します。 セッター注入は、依存関係注入を実装する最も柔軟で最も一般的な方法です。

コンストラクター注入とセッター注入の主な違い
- コンストラクター注入を使用して依存関係を注入する場合、Spring が管理する Bean でコンストラクターを使用して実行されますが、Setter インジェクションでは、Spring の IOC コンテナーによって管理されるいずれかの Bean に依存関係を注入する目的で set dependency() などのセッター メソッドが使用されます。
- セッター インジェクションは、コンストラクター インジェクションと比較して読みやすくなっています。これは、セッター メソッドの名前が常に setXYZ() のように set という単語で始まるため、Spring XML 構成ファイルで読み取り、設定されている依存関係を解釈するのが簡単であるのに対し、コンストラクター インジェクションでは依存関係を注入するためにインデックスが使用されるためです。
- セッター注入を使用して特定の依存関係をオーバーライドできますが、コンストラクターが呼び出されたときに新しいオブジェクトが作成されるたびに、コンストラクター注入を使用してオーバーライドすることはできません。
- セッター注入を使用すると、新しい Bean インスタンスを作成しないため、値を簡単に変更できますが、コンストラクター注入を使用する場合は、常に新しい Bean インスタンスを作成するため、そうではありません。
- コンストラクター注入は不変性をサポートしますが、一方、セッター注入は不変性をサポートしません。