第15章 DI定義

-依存性の注入-

目次

15.1. はじめに
15.2. <arg>要素
15.3. <property>要素
15.3.1. name属性
15.3.2. bindingType属性
15.4. <initMethod>要素
15.5. <destroyMethod>要素
15.6. まとめ

15.1. はじめに

本章では,DI (Dipendency Injection,依存性の注入) の利用方法について説明します.Seasar2が提供するDIの詳細は「」を参照してください.

15.2. <arg>要素

-コンストラクタ・インジェクション-

コンストラクタ・インジェクションは,<component>要素の子として<arg>要素を記述することによって指定します. <arg>要素は,呼び出したいコンストラクタの引数の数だけ記述します.

<component class="fullQualifiedClassName">
  <arg>content</arg>
  <arg>content</arg>
  ...
</component>

<arg>要素の内容には次のものを記述することができます.

  • OGNL式または<component>要素

  • <meta>要素 (Seasar2.1以降)

  • <description>要素

<arg>要素の内容がコンストラクタの引数として渡されます. <arg>要素を複数記述した場合は,その内容が記述した順番にコンストラクタ引数に渡されます. <arg>要素の数とその内容 (型) を適用できるコンストラクタが存在しない場合は,org.seasar.framework.beans.ConstructorNotFoundRuntimeExceptionがスローされます.

<component>要素にインスタンス生成式 (OGNL式) を記述した場合は,<arg>要素が記述されていても無視されます. <arg>要素の内容にOGNL式と<component>要素の両方を記述した場合,<component>要素は無視されます.

15.3. <property>要素

-セッター・インジェクション-

<component class="fullQualifiedClassName">
  <property
    name="propertyName"                                                                  (1)
    bindingType="must | should | may | none"                                             (2)
  >
    content
  </property>
</component>
(1)

name (必須): プロパティの名前を指定します.

(2)

bindingType (任意): バインディング・タイプを指定します.デフォルトはshouldです.

<property>要素の内容には次のものを記述することができます.

  • OGNL式または<component>要素

  • <meta>要素 (Seasar2.1以降)

  • <description>要素

<property>要素の内容にOGNL式と<component>要素の両方を記述した場合,<component>要素は無視されます.

15.3.1. name属性

-プロパティ名-

15.3.2. bindingType属性

-バインディング・タイプ-

(Version: 2.3.0~)

must

should (デフォルト)

may

none

15.4. <initMethod>要素

-initメソッド・インジェクション-

<component class="fullQualifiedClassName">
  <initMethod
    name="methodName"                                                                    (1)
  >
    <arg>content</arg>
    <arg>content</arg>
    ...
  </initMethod>
</component>
(1)

name属性 (任意): メソッドの名前を指定します.

<initMethod>要素の内容には次のものを記述することができます.

  • OGNL式または<arg>要素

  • <description>要素

<initMethod>要素にname属性でメソッド名を指定した場合は,そのメソッドの引数を<arg>要素を記述します.メソッドに引数がない場合は<arg>要素は不要です.

例 15.1. <initMethod>要素にname属性を指定した場合

<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>が記述されているコンポーネントを参照することができます.

例 15.2. <initMethod>要素にname属性を指定しなかった場合

<component class="java.util.HashMap">
  <initMethod>
    #self.clear()
  </initMethod>
  <initMethod>
    #self.put("key", "value")
  </initMethod>
</component>

<initMethod>要素にname属性が指定された場合は,OGNL式が記述されていても無視されます.

15.5. <destroyMethod>要素

-destroyメソッド・インジェクション-

<component class="fullQualifiedClassName">
  <destroyMethod
    name="methodName"                                                                    (1)
  >
    <arg>content</arg>
    <arg>content</arg>
    ...
  </destroyMethod>
</component>
(1)

name属性 (任意): メソッドの名前を指定します.

<destroyMethod>要素の内容には次のものを記述することができます.

  • OGNL式または<arg>要素

  • <description>要素

<destroyMethod>要素にname属性でメソッド名を指定した場合は,そのメソッドの引数を<arg>要素で記述します.メソッドに引数がない場合は<arg>要素は不要です.

例 15.3. <destroyMethod>要素にname属性を指定した場合

<component class="java.util.HashMap">
  <destroyMethod name="remove">
    <arg>"key"</arg>
  </destroyMethod>
</component>

<destroyMethod>要素にname属性を指定しなかった場合は,内容としてOGNL式を記述します. OGNL式の中では,#selfという変数で<destroyMethod>が記述されているコンポーネントを参照することができます.

例 15.4. <destroyMethod>要素にname属性を指定しなかった場合

<component class="java.util.HashMap">
  <destroyMethod>
    #self.remove("key")
  </destroyMethod>
</component>

<destroyMethod>要素にname属性が指定された場合は,OGNL式が記述されていても無視されます.

15.6. まとめ