主なリテラルのDIのやりかたです。
String,int,Map,ListのリテラルをDIします。
モジュール構成
Class1
import java.util.List; import java.util.Map; public class Class1 { public String str; public int i; public Map<Integer, String> map; public List<String> list; public void show() { System.out.println("----- Stringを表示します。 -----"); System.out.println(str); System.out.println(); System.out.println("----- intを表示します。 -----"); System.out.println(i); System.out.println(); System.out.println("----- mapを表示します。 -----"); for (Integer key : map.keySet()) { System.out.println(map.get(key)); } System.out.println(); System.out.println("----- listを表示します。 -----"); for (String s : list) { System.out.println(s); } System.out.println(); } }
Main
package org.yyama; import org.seasar.framework.container.SingletonS2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; public class Main { public static void main(String[] args) { SingletonS2ContainerFactory.init(); Class1 cls1 = SingletonS2Container.getComponent(Class1.class); cls1.show(); } }
app.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component name="class1" class="org.yyama.Class1"> <property name="str">"strの値です。"</property> <property name="i">100</property> <property name="map"> #{ 1:"mapの1", 2:"mapの2", 3:"mapの3" } </property> <property name="list"> { "listの1","listの2","listの3" } </property> </component> </components>
publicなフィールドへは<property>タグでDIできます。
実行結果
----- Stringを表示します。 ----- strの値です。 ----- intを表示します。 ----- 100 ----- mapを表示します。 ----- mapの1 mapの2 mapの3 ----- listを表示します。 ----- listの1 listの2 listの3
diconファイル内、<property name="・・・">の・・・にはプロパティ名を設定する必要があります。たとえばClass1の「public String str;」とdiconファイル内の「<property name="str">」の"str"は一致している必要があります。
これを間違えていると「クラス(xxx.xxx.xxx)のプロパティ(・・・)が見つかりません」と怒られます。