Seasarを使ってみる その5

diconファイルを使わない

いつもいつも、XMLに定義されたオブジェクトだけを注入すればよいわけじゃないよな、ユーザからの任意の入力もあるんだし…と思ったので、diconファイルを使わないでようにしてみる。

HogeImplを以下のように修正。


[HogeImpl.java]
public class HogeImpl implements Hoge {

private Foo foo = null;

public void setFoo(Foo foo) {
this.foo = foo;
}

public void showMessage() {
System.out.println(foo.getMessage());
}

}

FooImplも修正。


[FooImpl.java]
public class FooImpl implements Foo {

private String message = null;

public FooImpl(String message) {
this.message = message;
}

public String getMessage() {
return message;
}

}

クライアントも修正。(コードはあってるのかなぁ…)


[HelloClient .java]
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.impl.S2ContainerImpl;

public class HelloClient {

private static String PATH = "Hello.dicon";

public static void main(String[] args) {
S2Container container = new S2ContainerImpl();
container.register(new FooImpl("任意の入力"));
container.register(HogeImpl.class);
Hoge hoge = (Hoge) container.getComponent(Hoge.class);
hoge.showMessage();
}

}

で、実行。


任意の入力
動いた、動いた。

この場合、コンテナを使うメリットは何だろう?
注入するオブジェクトの組み立てが楽になる…ぐらいかな?HogeImplで、セッター・インジェクションがコンストラクタ・インジェクションになっても(ないとは思うけど)、コードの変更がない…とか。