Seasarを使ってみる

今後のためにと(たぶん)流行りのSeasarを使ってみた。

Hello, Seaser.

まず、ドキュメントに従って、サンプルを作ってみた。

コンポーネントのインターフェースが次の通り。


[Hoge.java]
public interface Hoge {

public void showMessage();

}

コンポーネントの実装が次の通り。


[HogeImpl.java]
public class HogeImpl implements Hoge {

public void showMessage() {
System.out.println("Hello World!");
}

}

diconファイルが次の通り。(Javaソースと同じディレクトリに配置)


[Hello.dicon]






クライアントが次の通り。


[HelloClient.java]
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class HelloClient {

private static String PATH = "C:/eclipse/workspace/seasar2/work/Hello.dicon";

public static void main(String args) {
S2Container container = S2ContainerFactory.create(PATH);
Hoge hoge = (Hoge) container.getComponent(Hoge.class);
hoge.showMessage();
}
}

で、動かしてみる。


org.seasar.framework.util.ResourceNotFoundRuntimeException: [ESSR0055]リソース(C:/eclipse/workspace/seasar2/work/Hello.dicon)が見つかりません
at org.seasar.framework.util.ResourceUtil.getResource(ResourceUtil.java:49)
...
…動かない。

diconファイルはクラスパスから取得してんのかな…と思って、クライアントを修正。


[HelloClient.java]
public class HelloClient {

private static String PATH = "Hello.dicon";

で、動いた。


Hello World!

インターフェースがコンポーネント取得時のキーになるらしい。
今度はコンポーネントにname属性をつけてみた。


[Hello.dicon]

クライアントは次のように修正。


[HelloClient.java]
Hoge hoge = (Hoge) container.getComponent("hoge");

これもちゃんと動いた。

次に、コンポーネントが生成されるタイミングはいつだろうと思って、コンポーネントの実装とクライアントを修正。


[HelloClient.java]
public class HelloClient {

private static String PATH = "Hello.dicon";

public static void main(String args) {
S2Container container = S2ContainerFactory.create(PATH);
Hoge hoge = (Hoge) container.getComponent("hoge");
Hoge hoge2 = (Hoge) container.getComponent("hoge");
hoge.showMessage();
hoge2.showMessage();
}
}


[HogeImpl.java]
public class HogeImpl implements Hoge {

public HogeImpl() {
System.out.println("生成されたよん");
}

で、実行結果。


生成されたよん
Hello World!
Hello World!

コンポーネントが状態を持たないなら、生成は一回でよいってことかな…