今後のためにと(たぶん)流行りの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!
コンポーネントが状態を持たないなら、生成は一回でよいってことかな…