liguofeng29’s blog

個人勉強用ブログだっす。

Dependency Injectionタイプその4 - フィールド・インジェクション

フィールドにDIを行なうのがフィールド・インジェクションです。

フィールドには、Bindingアノテーションを使って指定します。この機能は、2.4から利用できます。

 

app.dicon
 
<<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
 
<components>
  <include path="convention.dicon"/>
  <include path="aop.dicon"/>
     <!-- コンポーネント定義 -->
    <component name="fieldDI" class="FieldDI" instance="singleton">
    </component>
 
     <!-- コンポーネント定義 -->
    <component name="message2" class="java.lang.String" instance="singleton">
      <arg>"メッセージ2です。"</arg>
    </component>
</components>
 
FieldDI.java
import org.seasar.framework.container.annotation.tiger.Binding;
 
public class FieldDI  {
 
    // ONGL式
    @Binding(value = "new String(\"メッセージ1です。\")")
    private String message1;
 
    // component指定
    @Binding(value ="message2")
    private String message2;
 
    public String getMessage() {
        return this.message1 + "\r\n" + this.message2;
    }
}
TestClass.java
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
 
public class TestClass {
 
    public static void main(String[] args) {
        // S2Container初期化
        SingletonS2ContainerFactory.init();
 
        // コンポーネント取得
        FieldDI fieldDI = SingletonS2Container.getComponent("fieldDI");
        System.out.println(fieldDI.getMessage());
 
        // S2Container破棄
        SingletonS2ContainerFactory.destroy();
    }
}
 
出力メッセージ
メッセージ1です。
メッセージ2です。