SAStruts/自作のcreatorを作る

SAStruts/自作のcreatorを作る

既存のものを参考にする

デフォルトのcreator.diconを覗くと、

<component class="org.seasar.framework.container.creator.ServiceCreator"/>

と書かれているのでこのコードを参考にする。 ちなみにこれは「HogeHogeService」のような命名規約で作られたクラスをDIコンテナに自動登録するものだ。

パッケージがわかっているので読む

public class ServiceCreator extends ComponentCreatorImpl{
    public ServiceCreator(NamingConvention namingConvention){
        super(namingConvention);
        setNameSuffix(namingConvention.getServiceSuffix());
        setInstanceDef(InstanceDefFactory.PROTOTYPE);
        setEnableInterface(true);
        setEnableAbstract(true);
    }
    public ComponentCustomizer getServiceCustomizer() {
        return getCustomizer();
    }
    public void setServiceCustomizer(ComponentCustomizer customizer) {
        setCustomizer(customizer);
    }
}

ComponentCreatorImplを継承してゴニョゴニョすればいいっぽい

自作する

HogeCreatorを作る

package hoge.piyo.seasar.framework.container.creator;
 
public class HogeCreator extends ComponentCreatorImpl{
    public HogeCreator(NamingConvention namingConvention){
        super(namingConvention);
        setNameSuffix("Hoge");
        setInstanceDef(InstanceDefFactory.PROTOTYPE);
        setEnableInterface(true);
        setEnableAbstract(true);
    }
    public ComponentCustomizer getHogeCustomizer(){
        return getCustomizer();
    }
    public void setHogeCustomizer(ComponentCustomizer customizer){
        setCustomizer(customizer);
    }
}

見よう見まね。

そしてこのクラスがCreatorなんですよってcreator.diconに登録する

<component class="hoge.piyo.seasar.framework.container.creator.HogeCreator"/>

そしてこのクラスをオブジェクト生成の流れにのっけるためcutomizer.diconに書く

  <component name="hogeCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addCustomizer">
      <arg>traceCustomizer</arg>
    </initMethod>
  </component>

これを見る限りCustomizerもDIコンテナで管理されていて自動生成されているようね。 その生成時の処理をここに書いているようだ。

traceCustmizerは生成したインスタンスに対していトレースのログをとる機能をくっつけるかどうかを定義している。 つまりAOPなやつ。

まーできた。

コンポーネントのライフサイクル

InstanceDefFactory.SINGLETON 唯一。何度DIされても同じものを指す
InstanceDefFactory.PROTOTYPE 毎回生成。DIされる度に生成
InstanceDefFactory.APPLICATION アプリで一つ。アプリを起動する度に生成?
InstanceDefFactory.SESSION セッション開始する度に生成。同一セッション中は同じものを指す
InstanceDefFactory.REQUEST リクエスト時に生成。同一リクエスト内なら同じものを指す
InstanceDefFactory.OUTER よくわからんw

参考サイト

タグ

java/sastruts/create_my_creator.txt · 最終更新: 2017-09-26 18:34 by ore