[Seasar-user:16308] Re: [s2-container] あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき
Mitsutaka Sato
[E-MAIL ADDRESS DELETED]
2008年 11月 17日 (月) 13:19:18 JST
小林様
いつもお世話になっております。
はい、logic.diconのほうはname属性はつけていません。
mock.diconのほうにname属性をつけてやってみたのですが、
logic.diconに用意したほうがセットされてしまいました。
下記の例でいう、HogeServiceとHogeLogicは両方とも logic.dicon に
登録されている形です。
「名前があるほうが優先される」ということですが、
class HogeService {
@resource
private HogeLogic hogeLogic;
}
の場合、「hogeLogic」(クラス名をdecapitalizeしたもの)
という名前でコンポーネントを探し、
無ければ、 HogeLogicをインターフェースに持つ
コンポーネントを探すという理解でよろしいでしょうか?
また、例では上記のように書きましたが、
実際にはアノテーションではなくsetterインジェクション
なのですが、それによる違いはありますでしょうか?
もし、同じ名前でcomponentを登録してしまった場合は
どのようになるのでしょうか?
以上よろしくお願いいたします。
2008/11/13 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>
> 小林 (koichik) です.
>
> Date: Thu, 13 Nov 2008 21:01:45 +0900
> From: "Mitsutaka Sato" <[E-MAIL ADDRESS DELETED]>
> To: seasar-user <[E-MAIL ADDRESS DELETED]>
> Subject: [Seasar-user:16296] [s2-container]
> あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき
>
> > HogeServiceのテストケースで、hogeLogicをMockInterceptorを使ったMockに置き換えたいとき、
> > どのようにすればよいでしょうか?
> >
> > HogeLogicはlogic.diconに
> > <component
> > class="com.hoge.impl.HogeLogicImpl"
> > instance="prototype">
> > <aspect>j2ee.requiredTx</aspect>
> > </component>
> > のように定義されていて、
> >
> > mock.dicon に
> > <component name="mockInterceptor"
> >
> > class="org.seasar.framework.aop.interceptors.MockInterceptor">
> > <initMethod name="setReturnValue">
> > <arg>"getCenterSeq"</arg>
> > <arg>"9998000001"</arg>
> > </initMethod>
> > </component>
> > <component
> > class="com.hoge.HogeLogic"
> > instance="prototype">
> > <aspect>mockInterceptor</aspect>
> > </component>
> > と書いて、
> >
> > app.diconでは
> > mock.diconとlogic.diconをincludeしました。
> > 順番を入れ替えてみても、実態(HogeLogicImpl)のほうがセットされてしまいます。
>
> 実際には logic.dicon の定義だけコンポーネント名が
> 指定されていないでしょうか?
>
> もしそうなら,mock.dicon でもコンポーネント名を
> 指定してください.
>
> <component
> name="hogeLogic"
> class="com.hoge.HogeLogic"
> instance="prototype">
>
> Seasar2.4 では最初にコンポーネントを名前で検索します.
> そのため,片方だけ名前が指定されていると,常にそちらが
> DI されます.
>
> > logic.diconをincludeしなければいいだけの話なんですが、他にもたくさん登録されているので。
> > 横着できる方法はないかと。
> >
> > 同じインターフェースを持つComponentの場合、優先される順位とかあるんでしょうか?
>
> あります.
> app.dicon が foo.dicon と bar.dicon をこの順で
> インクルードし,foo.dicon が baz.dicon を
> インクルードしている場合,
>
> app.dicon
> foo.dicon
> baz.dicon
> bar.dicon
>
> app.dicon に定義されているコンポーネントからは,
> 上記の順番で優先的に見えます.
> つまり,
>
> ・app.dicon がもっとも優先
> ・foo.dicon は bar.dicon や baz.dicon より優先
> ・baz.dicon は bar.dicon より優先
>
> となります.
> こちらの図も参考にしてください.
>
>
> http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/container/S2Container.html
>
>
> --
> <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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20081117/61f15114/attachment-0001.html>
Seasar-user メーリングリストの案内