[Seasar-user:16702] Re: 【S2container】DIされるコンポーネントのインスタンス名に関して
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 1月 21日 (水) 16:00:37 JST
小林 (koichik) です.
Date: Wed, 21 Jan 2009 12:25:52 +0900
From: "oono" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:16698] 【S2container】DIされるコンポーネントのインスタンス名に関して
> public class HugaPage{
>
> public HogeService hogeService; ←DI (OK)
> public HogeService aaa; ←DI (OK)
> public HogeDao hogeDao; ←DI (OK)
> public HogeDao bbb; ←DI (NG)
> }
>
> XxxService XxxLogic などは自動バインディングと自動登録
> 適用対象なのでdiconファイル等には何も設定していません。
> 上記インスタンスのhogeService を 任意の名前に変えても
> 動作するのですが、Daoの場合インスタンスを例えばaaaとかに変更して
> しまうとDIされません。
これだけだと何が起きているか分かりません.
通常なら Dao のフィールド名に関わらず DI
されるはずです.
名前を変えると DI されないということは,
HogeDao を実装 (AOP が適用されたものを含む) した
コンポーネントが複数存在するのかもしれません.
> インスタンス名というのは何でも良いのでしょうか?
いいえ.
プロパティの型が実装クラスの場合はプロパティ名が
コンポーネント名と一致する場合のみ DI されます.
プロパティの型がインタフェースの場合でも,その
インタフェースを実装したコンポーネントが複数ある
場合はプロパティ名とコンポーネント名が一致する
コンポーネントが一つだけ存在する場合に DI されます.
> それともDaoだけ特殊なのでしょうか?
そんなことはありません.
--
<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 メーリングリストの案内