Dependency Injectionタイプその3 - メソッド・インジェクション
メソッド名はname属性で指定します。
initMethodタグの子タグであるargタグで引数を指定することや、name属性を省略してボディでOGNL式を使うこともできます。
app.dicon |
<components>
<include path="convention.dicon"/>
<include path="aop.dicon"/>
<!-- コンポーネント定義 -->
<component name="methodDI" class="MethodDI" instance="singleton">
<!-- パラメタが必要な場合はargタグ -->
<initMethod name="addMessage">
</initMethod>
<initMethod name="addMessage">
</initMethod>
<initMethod name="addMessage">
</initMethod>
</component>
|
MethodDI.java |
import java.util.List;
public class MethodDI {
private List<String> messageList = new ArrayList<String>();
// DIメソッド
public void addMessage(String message) {
messageList.add(message);
}
// 出力
public String getMessageList() {
StringBuilder sb = new StringBuilder();
for(String s : this.messageList) {
sb.append(s);
sb.append("\r\n");
}
return sb.toString();
}
}
|
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();
// コンポーネント取得
MethodDI methodDI = SingletonS2Container.getComponent("methodDI");
System.out.println(methodDI.getMessageList());
// S2Container破棄
SingletonS2ContainerFactory.destroy();
}
}
|
出力メッセージ |