[Seasar-user:4008] Re: 2つのプロジェクト間でのDIが行われない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 7月 3日 (月) 17:20:38 JST


小林 (koichik@しながわ) です.

Date:    Fri, 30 Jun 2006 17:24:17 +0900
From:    "吉岡 武志/インフォセンス" <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:4002] Re: 2つのプロジェクト間でのDIが行われない

> 実行するクラス(testProject側のクラス)から、[testPorject側のdiconファイル]を
> includeして
> 実行したところmainProject側のincludeが優先して読み込まれます。
> (JobDaoImplが自動登録されている状態)
略
> これは、mainProject側にインターフェースがあるためJobDaoImpl(mainProject側)
> が自動登録される
> のでしょうか?

コンポーネントの登録そのものには優先という考え方はありません.
それぞれの dicon ファイルの記述に従って全て自動登録されます.
test 側のコンテナには MockJobDaoImpl が登録され,main 側にの
コンテナには JobDaoImpl が登録されます.

> [ S2Container定義の分割とインクルードの文章引用 ]
> コンポーネントの検索順は、先ず自分自身に登録されているコンポーネントを探し
> て、見つからない場合は、
> includeされている順に子供のS2Containerに登録されているコンポーネントを検索
> し、最初に見つかった
> コンポーネントが返されます。

この記述は登録に関するものではなく,コンポーネントの取得の際に
適用されるものです.

吉岡さんの例では,test 側の dicon を読み込んだコンテナと,
main 側の dicon を読み込んだコンテナの二つが存在し,test 側の
コンテナは親,main 側のコンテナは子供になります.

親のコンテナから JobDao を取得しようとすると,子供のコンテナ
(main 側) よりも親 (test 側) 自身に登録されている JobDaoを探し,
MockJobDaoImpl が見つかるはずなのでそれを返します.


なお,AspectAutoRegister はそれが記述された dicon を読み込んだ
コンテナに登録されるコンポーネントにのみ適用されます.
main 側の dicon に書かれた AspectAutoRegister は main 側の
コンポーネントにのみ適用され,test 側には適用されません.
test 側の dicon にも AspectAutoRegister が必要です.
単に引用する際に削っただけかもしれませんが念のため.


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内