山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

S2ContainerによるリテラルのDI

主なリテラルのDIのやりかたです。

String,int,Map,ListのリテラルをDIします。

モジュール構成
f:id:yyama1556:20130413083143p:plain


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)のプロパティ(・・・)が見つかりません」と怒られます。