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