[Seasar-user:4562] Re: [S2Struts]Servletコンテナ上でDxoがInjectionされない
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2006年 9月 7日 (木) 04:00:39 JST
小林 (koichik) です.
Date: Wed, 06 Sep 2006 14:08:20 +0900
From: Yasuhiro Oguro <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:4553] [S2Struts]Servletコンテナ上でDxoがInjectionされない
> app.diconは
> <components>
> <include path="s2struts.dicon" />
> <include path="allaop.dicon" />
> <include path="alldao.dicon" />
> <include path="s2dxo.dicon" />
> <!-- singleton -->
> <component name="workTimeDxo" class="hoge.dxo.WorkTimeDxo">
> <aspect>s2dxo.s2DxoIntereceptor</aspect>
> </component>
> 。。。
> <components>
> です。作法に則ってないのがよくないのでしょうか・・・
WorkTimeLogicImpl はどこに定義していますか?
もし WorkTimeLogicImpl が app.dicon に定義されていれば
WrokTimeDxo が DI されるはずですが,別の dicon に
定義されていると,そこからは WorkTimeDxo が見えないため
DI されなくなってしまいます.
S2 では,コンポーネントに DI されるのは,
・コンポーネントが定義されているコンテナに登録されているコンポーネント
・コンポーネントが定義されているコンテナがインクルードしている
コンテナのコンポーネント (インクルードしているコンテナが
インクルードしているコンテナも含む)
のいずれかになります.
簡単に表現すると,親から子は見えるが,子から親は見えない,
ということになります.
もし app.dicon が
<components>
<include path="dxo.dicon"/>
<component class="LogicImpl"/>
</component>
となっている場合,LogicImpl には dxo.dicon に定義された
Dxo が DI されますが,
<components>
<include path="logic.dicon"/>
<component class="Dxo"/>
</components>
となっていると,logic.dicon に定義された LogicImpl に
Dxo は DI されません.
コンポーネントを定義する dicon の位置に気をつけて
確認してみてください.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内