[Seasar-user:3454] Re: AutoRegister の記述順

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 4月 4日 (火) 01:20:22 JST


小林 (koichik) です.

Date:    Wed, 29 Mar 2006 18:14:33 +0900
From:    松山 大樹 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:3446] Re: AutoRegister の記述順

>  s2jsf-example の、app.dicon には、次のように設定されています。
> -------------------------------------------------------------------------
> <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister" >
>   <property name="instanceDef">@[E-MAIL ADDRESS DELETED]</property>
>   <initMethod name="addClassPattern">
>     <arg>"examples.jsf.action.impl"</arg>
>     <arg>".*ActionImpl"</arg>
>   </initMethod>
> </component>
> <component class="org.seasar.framework.container.autoregister.AspectAutoRegister" >
>   <property name="interceptor">actionInterceptorChain</property>
>   <initMethod name="addClassPattern">
>     <arg>"examples.jsf.action.impl"</arg>
>     <arg>".*ActionImpl"</arg>
>   </initMethod>
> </component>
> -------------------------------------------------------------------------
> コンポーネントの自動登録の設定があり、その次にアスペクトの自動登録の設定があります。
> これだと、
>  「アスペクトを適用されるコンポーネントは、
>   アスペクトの自動登録の設定よりも後に記述する必要があります。」
> という記述と異なっていると思うのですが、なぜ *ActionImpl に対して、actionInterceptorChain は
> 正常に適用されているのでしょう?

「自動登録の設定」は「アスペクトを適用されるコンポーネントの設定」
とは異なります.

最初に二つのコンポーネントがあります.

<component class="ComponentAutoRegister"/>
<component class="AspectAutoRegister"/>

まず,ComponentAutoRegister が初期化され,いくつかの
コンポーネントが自動登録されます.
これはコンテナの最後に新たなコンポーネントの定義を
追加します.
つまり,次のように定義したのと同じようになります.

<component class="ComponentAutoRegister"/>
<component class="AspectAutoRegister"/>
<component class="FooActionImpl"/>
<component class="BarActionImpl"/>

ここで,アスペクトを適用されるクラスはアスペクトの
自動登録よりも後ろに追加されることになります.
そして AspectAutoRegister が初期化され,アスペクトが
適用されます.



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




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