[Seasar-user:3434] Re: 自動バインディングについて
akiyama
[E-MAIL ADDRESS DELETED]
2006年 3月 27日 (月) 23:57:09 JST
こんにちは。穐山です。
下記のようなことがやりたかった事です。
それで、自分で考えていたのは ServiceLocator を S2Container そのものに
してしまおうと思っていました。
下記に書いてあるとおりインタフェース/クラスを使うと業務ロジックにS2が依存
しない形になりますね。
下記方法を参考にしてみたいと思います。
ありがとうございます。
>
> 穐山さんの意図されている(と思われる)ことですが、
> ライフサイクルが逆転する箇所はDIではなく ServiceLocator
> を使えば良いのではないでしょうか?
>
> ↓こんな感じ。
> public interface Foo {
> public void doSomething();
> }
>
> public interface Bar {
> public void doSomething();
> }
>
> public interface BarLocator {
> public Bar getBar();
> }
>
> public class FooImpl implements Foo {
> private BarLocator locator;
> public void setLocator(BarLocator locator) {
> this.locator = locator;
> }
> public void doSomething() {
> Bar bar = locator.getBar();
> System.out.println(this);
> System.out.println(bar);
> bar.doSomething();
> }
> }
>
> public class BarImpl implements Bar {
> public void doSomething() {
> System.out.println("doSomething!!");
> }
> }
>
> public class BarLocatorImpl implements BarLocator {
> private S2Container container;
> public void setContainer(S2Container container) {
> this.container = container;
> }
> public Bar getBar() {
> return (Bar)container.getComponent(Bar.class);
> }
> }
>
> <?xml version="1.0" encoding="Shift_JIS"?>
> <!DOCTYPE components PUBLIC
> "-//SEASAR//DTD S2Container//EN"
> "http://www.seasar.org/dtd/components.dtd">
> <components>
> <component class="sandbox.FooImpl" instance="singleton"/>
> <component class="sandbox.BarImpl" instance="prototype"/>
> <component class="sandbox.BarLocatorImpl" instance="singleton"/>
> </components>
>
> ServiceLocator は S2Container そのものでもいいのですが、
> そうすると、業務ロジックがS2に依存してしまうので、
> 別インタフェース/クラスを作っています。
>
Seasar-user メーリングリストの案内