[Seasar-user:2143] Re: injectDependencyについて

Masataka Kurihara kurihara
2005年 6月 8日 (水) 10:16:44 JST


栗原です。

> ComponentsTagHandler handler = new ComponentsTagHandler();
> handler.setContainerImplClass(MyS2Container.class);  //追加メソッド
> S2ContainerTagHandlerRule rule = new S2ContainerTagHandlerRule();
> rule.addTagHandler("/components", handler);
> XmlS2ContainerBuilder.setRule(rule);                 //追加メソッド

> ともあれ (JW),injectDependency() の件はなしにしたいなっと.
> 自分の感覚では上の対応はありだけど injectDependency() のあれは
> ちょっといやーんなので.

  感覚だけの話だと、私は逆です。が、もう両方やっといたほうがいいん
じゃないかなぁ。
  
  一方、実装方法はともかく、コンポーネント定義が無いときに、その問題
解決をS2ContainerImplでなく、ComponentDeployerFactoryに持って
いってもらうのが、なぜに「いやーん」なのかちょっと感覚を共有できてない。
コンテナのカスタマイズポイントを一箇所に集中させたほうが、効率的かと
思います。

/*ComponentDeployer のカスタマイズ実装*/
public class HogeComponentDeployer 
    extends AbstractComponentDeployer {
  //実装
}

/*ComponentDeployerFacotoryの継承カスタマイズ*/
public class HogeFactory extends ComponentDeployerFacotory {
  public ComponentDeployer create(ComponentDef componentDef) {
    if(componentDef instanceof NullComponentDef) {
      return HogeComponentDeployer.getInstance();
    }
    return super.create(componentDef);
  }
}

/*アプリケーションコードのどこか*/
static {
  ComponentDeployerFacotory.setDefaultFactory(new HogeFactory());
}

このstaticメソッド一発で、既存と新規の切り替えが可能なので、シンプル
じゃないですか。あとは、HogeComponentDeployerで作りこみすればいい
わけです。こっちのほうがキレイだと思うけど、いかがでしょう?

--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--





Seasar-user メーリングリストの案内