[Seasar-user:10203] Re: setterインジェクションについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 8月 30日 (木) 01:00:33 JST


小林 (koichik) です.

Date:    Thu, 30 Aug 2007 00:02:11 +0900
From:    渡辺茂昭 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10199] setterインジェクションについて

> 1.root.dao.aaaDaoというインターフェースを自動で登録しています。
> 2.root/service/service.diconにbbbServiceというコンポーネントを明示的に
> 登録します。このコンポーネントはaaaDaoを明示的にsetterインジェクションし
> ています。
> 4.今状況下で、bbbServiceはTOMCAT起動時にインスタンスが作成されるようで、
> 「aaaDaoというコンポーネントはありません」というエラーでプロパティが設定
> できません。

SMART deploy で自動登録されるコンポーネントは
ルートのコンテナ (app.dicon) に登録されます.
そのため,service.dicon に定義されている
bbbService には aaaDao は DI されません.

こちらの図も参考にどうぞ.

http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/container/S2Container.html

この図の B が service.dicon だとすると,そこに
登録されているコンポーネント bbbService から
A (app.dicon) に登録されているコンポーネント
(aaaDao) を参照することはできません.

> 3.root/web/member.diconにcccPageというコンポーネントを明示的に登録して
> います。このコンポーネントはaaaDaoを明示的にsetterインジェクションしてい
> ます。
> 5.cccPageのプロパティはそのページをアクセスした時点でインスタンスが生
> 成され、それに伴いaaaDaoも生成されて、プロパティが設定されます。

member.dicon に登録されている cccPage に
aaaDao が DI されることはないはずなので,
実際には SMART deploy で自動登録されているのでは
ないかと思います.
コンソールに

クラス(CccPage)のコンポーネント定義を登録します

のようなメッセージが出力されていないでしょうか?
もし出力されているなら,コンポーネント名が
間違っていないか確認してください.

>  ここで質問なのですが、bbbServiceのインスタンス生成を無事行うにはどうし
> たら言いのでしょうか?

XInclude を使って service.dicon および
member.dicon をインクルードしてください.

http://s2container.seasar.org/2.4/ja/DIContainer.html#XInclude

「includeタグとの違い」のところに今回のような
状況での XInclude と通常の <include> との違いが
説明されています.


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