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のタイプを使用してください。しかし、セッターインジェクションの単純さのために、ほとんどのシナリオでは常に選択されています。