[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 メーリングリストの案内