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