DI定義 -依存性の注入-
はじめに 本章では,DI (Dipendency Injection,依存性の注入) の利用方法について説明します.Seasar2が提供するDIの詳細は「」を参照してください.
<literal><arg></literal>要素 -コンストラクタ・インジェクション- <literal><arg></literal>要素の用途 <arg>要素はコンストラクタ・インジェクションだけではなく,メソッド・インジェクションでも使われます. <components>要素の直下の<arg>要素はコンストラクタ・インジェクション, <initMethod>または<destroyMethos>直下の<arg>要素はメソッド・インジェクションとなります. コンストラクタ・インジェクションは,<component>要素の子として<arg>要素を記述することによって指定します. <arg>要素は,呼び出したいコンストラクタの引数の数だけ記述します. <component class="fullQualifiedClassName"> <arg>content</arg> <arg>content</arg> ... </component> <arg>要素の内容には次のものを記述することができます. OGNL式または<component>要素 <meta>要素 (Seasar2.1以降) <description>要素 コンストラクタを呼び出せない場合 コンストラクタ呼び出しでコンポーネントを直接インスタンス化できない場合は,<arg>要素を指定せず「インスタンス生成式」を指定してください. <arg>要素の内容がコンストラクタの引数として渡されます. <arg>要素を複数記述した場合は,その内容が記述した順番にコンストラクタ引数に渡されます. <arg>要素の数とその内容 (型) を適用できるコンストラクタが存在しない場合は,org.seasar.framework.beans.ConstructorNotFoundRuntimeExceptionがスローされます. <component>要素にインスタンス生成式 (OGNL式) を記述した場合は,<arg>要素が記述されていても無視されます. <arg>要素の内容にOGNL式と<component>要素の両方を記述した場合,<component>要素は無視されます.
<literal><property></literal>要素 -セッター・インジェクション- <component class="fullQualifiedClassName"> <property name="propertyName" bindingType="must | should | may | none" > content </property> </component> name (必須): プロパティの名前を指定します. bindingType (任意): バインディング・タイプを指定します.デフォルトはshouldです. JavaBeansのプロパティ名 JavaBeansの仕様では,プロパティ名の最初の文字は小文字となります. ただし,二文字目が大文字の場合は先頭も大文字となります. 正: fooBar, z, URL 誤: FooBar, Z, url, uRL <property>要素の内容には次のものを記述することができます. OGNL式または<component>要素 <meta>要素 (Seasar2.1以降) <description>要素 <property>要素の内容にOGNL式と<component>要素の両方を記述した場合,<component>要素は無視されます.
<literal>name</literal>属性 -プロパティ名-
(Version: 2.3.0~) bindingType属性 -バインディング・タイプ- must should (デフォルト) may none
<literal><initMethod></literal>要素 -initメソッド・インジェクション- <component class="fullQualifiedClassName"> <initMethod name="methodName" > <arg>content</arg> <arg>content</arg> ... </initMethod> </component> name属性 (任意): メソッドの名前を指定します. <literal><arg></literal>要素について <arg>要素については「」を参照してください. <initMethod>要素の内容には次のものを記述することができます. OGNL式または<arg>要素 <description>要素 <initMethod>要素にname属性でメソッド名を指定した場合は,そのメソッドの引数を<arg>要素を記述します.メソッドに引数がない場合は<arg>要素は不要です. <literal><initMethod></literal>要素に<literal>name</literal>属性を指定した場合 <component class="java.util.HashMap"> <initMethod name="clear"/> <initMethod name="put"> <arg>"key"</arg> <arg>"value"</arg> </initMethod> </component> <initMethod>要素にname属性を指定しなかった場合は,内容としてOGNL式を記述します. OGNL式の中では,#selfという変数で<initMethod>が記述されているコンポーネントを参照することができます. <literal><initMethod></literal>要素に<literal>name</literal>属性を指定しなかった場合 <component class="java.util.HashMap"> <initMethod> #self.clear() </initMethod> <initMethod> #self.put("key", "value") </initMethod> </component> <initMethod>要素にname属性が指定された場合は,OGNL式が記述されていても無視されます.
<literal><destroyMethod></literal>要素 -destroyメソッド・インジェクション- <literal><destroyMethod></literal>の適用対象 <destroyMethod><component>要素のinstance属性がsingletonの場合に限り有効です. <component class="fullQualifiedClassName"> <destroyMethod name="methodName" > <arg>content</arg> <arg>content</arg> ... </destroyMethod> </component> name属性 (任意): メソッドの名前を指定します. <literal><arg></literal>要素について <arg>要素については「」を参照してください. <destroyMethod>要素の内容には次のものを記述することができます. OGNL式または<arg>要素 <description>要素 <destroyMethod>要素にname属性でメソッド名を指定した場合は,そのメソッドの引数を<arg>要素で記述します.メソッドに引数がない場合は<arg>要素は不要です. <literal><destroyMethod></literal>要素に<literal>name</literal>属性を指定した場合 <component class="java.util.HashMap"> <destroyMethod name="remove"> <arg>"key"</arg> </destroyMethod> </component> <destroyMethod>要素にname属性を指定しなかった場合は,内容としてOGNL式を記述します. OGNL式の中では,#selfという変数で<destroyMethod>が記述されているコンポーネントを参照することができます. <literal><destroyMethod></literal>要素に<literal>name</literal>属性を指定しなかった場合 <component class="java.util.HashMap"> <destroyMethod> #self.remove("key") </destroyMethod> </component> <destroyMethod>要素にname属性が指定された場合は,OGNL式が記述されていても無視されます.
まとめ