menu
書いてる野郎
orebike@gmail.com
デフォルトの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 |