スプリング依存性注入(DI)
Springフレームワークでは、Dependency Injection(DI)デザインパターンを使用して、オブジェクト間の依存関係を定義します。それは2つの主要なタイプで存在します:
1.セッター注入
これは最も一般的で単純なDIメソッドです。セッターメソッドを使用して依存関係を注入します。
例
セッターメソッドを持つヘルパークラス。
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
Beanを宣言し、セッター注入(プロパティタグ)を介して依存関係を設定するためのBean構成ファイル。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="OutputHelper" class="com.mkyong.output.OutputHelper">
<property name="outputGenerator">
<ref bean="CsvOutputGenerator"/>
</property>
</bean>
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator"/>
<bean id="JsonOutputGenerator" class="com.mkyong.output.impl.JsonOutputGenerator"/>
</beans>
Setterメソッド(setOutputGenerator)を介して ‘OutputHelper’オブジェクトに ‘CsvOutputGenerator’ beanを挿入するだけです。
2.コンストラクタインジェクション
このDIメソッドはコンストラクタを介して依存関係を注入します。
例
コンストラクタを持つヘルパークラス。
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
OutputHelper(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
Beanを宣言し、コンストラクタインジェクション(constructor-argタグ)を介して依存関係を設定するためのBean設定ファイル。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="OutputHelper" class="com.mkyong.output.OutputHelper">
<constructor-arg>
<bean class="com.mkyong.output.impl.CsvOutputGenerator"/>
</constructor-arg>
</bean>
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator"/>
<bean id="JsonOutputGenerator" class="com.mkyong.output.impl.JsonOutputGenerator"/>
</beans>
あなたはコンストラクタを介して ‘OutputHelper’オブジェクトに ‘CsvOutputGenerator’ビーンを注入するだけです。
セッターやコンストラクタの注入?
Springフレームワークで設定されたハードルールはありません。プロジェクトのニーズに合ったDIのタイプを使用してください。しかし、セッターインジェクションの単純さのために、ほとんどのシナリオでは常に選択されています。