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