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

Masataka Kurihara kurihara
2005年 6月 1日 (水) 16:21:19 JST


栗原です。

  帰りました。で、見ました。残念!finalだったりprivateだったりして
いじれない。ま、一案として、以下の実装の(仕様の、ではない)変更
をしてもらえたとしましょう。
  コードはメールで直接書いてるので、タイポはあるかもしれません。

・ AbstractComponentDeployerのAssemblerを用意する
   メソッド群が全部private。以下がprotectedになるといじれる
     private void setupAssemblerForAuto()
     private void setupConstructorAssemblerForAuto()
     private void setupAssemblerForConstructor()
     private void setupAssemblerForProperty()
     private void setupAssemblerForNone()

・ ComponentDeployerFactoryがfinalでいじりようない形なので、
  たとえば以下のようにしてもらったとする。。。

public class ComponentDeployerFactory {
  private static ComponentDeployerFactory _factory;
  public static ComponentDeployerFactory getFactory() {
    if(_factory == null) {
      _factory = new ComponentDeployerFactory();
    }
    return _factory;
  }
  public static void setFactory(ComponentDeployerFactory factory) {
    _factory = factory;
  }
  public ComponentDeployer create(ComponentDef componentDef) {
     (略。非staticにするが、メソッドの内容は変更せず)
  }
}

・ ComponentDefImplの中で、ComponentDeployerFactoryを呼んでるところ
  をちょっと変更。

  private synchronized ComponentDeployer getComponentDeployer() {
    if (componentDeployer_ == null) {
      ComponentDeployerFactory factory =
          ComponentDeployerFactory.getFactorry();
      componentDeployer_ = factory.create(this);
    }
    return componentDeployer_;
  }

・ S2ContainerImplの中で、Componentをとるところをちょっと変更

  private static final NullComponentDef NULL_COMP = 
      new NullComponentDef();
  public ComponentDef getComponentDef(Object key)
      throws ComponentNotFoundRuntimeException {
    ComponentDef cd = getComponentDef0(key);
    if (cd == null) {
      cd = NULL_COMP;
    }
    return cd;
  }

・ NullComponentDefをつくる
public class NullComponentDef extends SimpleComponentDef {
  (コンストラクタとか、いろいろ実装の記述省略...)

  public Object getComponent() {
    throw new ComponentNotFoundRuntimeException();
  }
}

  上記の実装の変更があれば、横田さんの件も、私の件もアダプター
実装して差し込めそうかな。

> (でもAssemblerとかDeployerとかを理解していないのでまずはそっちを勉強して
> おきますね。)

ちなみに、この辺の資料?というか仕組みの超概略では昨年の11月の
からさわぎで、「ディープS2」としてセッションしました。SourceForgeにPPT
が上がってたハズ

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





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