FAQ/S2AOP
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[FAQ]]
*S2AOP [#db17a433]
#contents
**複数のアスペクトを自動登録したい [#vb7922e6]
>[[S2サポーター]] (2006-04-29 (土) 19:34:12)~
~
''Question''~
over 2.3のAspectAutoRegisterを使って、自動登録へ切り替え...
~
ソースを拝見させていただきましたが、複数のアスペクトを自...
~
従来の記述で言えば、~
<component ...>
<aspect>aop.traseInterceptor</aspect>
<aspect>dao.interceptor</aspect>
</component>
のような場合です。~
~
~
''Answer''~
InterceptorChain を使うのがよいかと思います.~
~
<component name="traceAndDao" class="org.seasar.framewor...
<initMethod name="add">aop.traceInterceptor</initMet...
<initMethod name="add">dop.interceptor</initMethod>
</component>
~
としておいて,traceAndDao を AspectAutoRegister で設定.~
~
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2005-October/00...
http://ml.seasar.org/archives/seasar-user/2005-October/00...
//
**diconでOGNL式にaspect適用可能か? [#d29c919e]
>[[S2サポーター]] (2006-04-29 (土) 16:32:41)~
~
''Question''~
diconファイルで、OGNL式で取得したコンポーネントに対して~
アスペクトを適用するように記述することは可能でしょうか?~
~
以下のように書きたかったのですが、エラーになります。~
~
<component>
@hogeFactory @ HOGE
<aspect>hogeInterceptor</aspect>
</component>
~
''Answer''~
できません.~
~
S2AOP は,元のクラスを継承したサブクラスを作成します.~
アスペクトが適用されるのはそのサブクラスのインスタンスに~
なります.~
OGNL で取得したコンポーネントはすでにインスタンス化されて~
しまっており,S2AOP が作成したサブクラスのインスタンスでは~
ないためアスペクトは適用されません.~
~
DelegateInterceptor を使えばやりたいことが~
できるかもしれません.~
~
<component class="...">
<aspect>hogeInterceptor</aspect>
<aspect>
<component class="org.seasar.framework.aop.intercept...
<property name="target">@hogeFactory @ HOGE</prop...
</component>
</aspect>
</component>
~
一番外側の <component> 要素には class 属性を指定する必要...
インタフェースを指定しても構いません.このコンポーネント...
最初に hogeInterceptor が適用され,その後にDelegateInterc...
~
DelegateInterceptor は target プロパティに指定されたコン...
(同じメソッドを呼び出します).
~
当然ですが,コンテナから取得したコンポーネントのメソッド...
hogeFactory.HOGE のメソッドを呼び出してもダメです.~
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2006-April/0054...
http://ml.seasar.org/archives/seasar-user/2006-April/0054...
**アスペクト (インターセプタ) を singleton 以外にすること...
~
''Question''~
aspect (インターセプタ) のインスタンスモードを singleton ...
インスタンスモードを request にして HttpServletRequest の...
~
~
<component name="myInterceptor" instance="request" class...
<component name="myComponent" class="...">
<aspect>myInterceptor</aspect>
</component>
~
''Answer''~
*** [[Seasar]] 2.3.7 以前 [#qa5595ff]
インターセプタに [[InterceptorLifecycleAdapter:http://s2c...
~
S2AOP は,元のクラスを継承したサブクラスを作成する際にイ...
このため,インターセプタのインスタンスモードが prototype ...
~
このような場合には,インターセプタの instance 属性を prot...
※この方法はインターセプタが org.seasar.framework.aop.inte...
~
<include path="aop.dicon"/>
<component name="myInterceptor" instance="prototype" cla...
<aspect>aop.lifecycleAdapter</aspect>
</component>
<component name="myComponent" instance="request" class="...
<aspect>myInterceptor</aspect>
</component>
~
これにより,myInterceptor の invoke メソッドが呼ばれるた...
Client -> myInterceptor (コンテナ初期化時に取得) -> Inte...
という呼び出しシーケンスになります.最初の myInterceptor ...
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2005-December/0...
http://ml.seasar.org/archives/seasar-user/2005-December/0...
この方法は [[Seasar]] 2.3.8 以降では利用できません.
*** [[Seasar]] 2.3.13 以降 [#i45fc6c8]
対象のコンポーネントには InterceptorAdapter をアスペクト...
本来のインターセプタはインスタンスモードを prototype にし...
<component name="myInterceptor" instance="prototype" cla...
<component class="...">
<aspect>
<component class="org.seasar.framework.aop.intercept...
<initMethod name="add"><arg>"myInterceptor"</arg><...
</component>
</aspect>
</component>
これにより,InterceptorAdaptor の invoke メソッドが呼ばれ...
Client -> InterceptorAdaptor (コンテナ初期化時に取得) ->...
という呼び出しシーケンスになります.~
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2006-September/...
http://ml.seasar.org/archives/seasar-user/2006-September/...
この方法は[[Seasar]]2.3.12 以前では利用できません.
*** [[Seasar]]2.4.10 以降で SMART deploy を使う場合 [#q69...
インターセプタを適用する AspectCustomizer の useLookupAda...
<component class="org.seasar.framework.container.customi...
<property name="interceptorName">"requestInterceptor"<...
<property name="useLookupAdapter">true</property>
</component>
CustomizerChain#addAspectCustomizer を使っていて,ポイン...
<initMethod name="addAspectCustomizer">
<arg>"requestInterceptor"</arg><!-- interceptorName -->
<arg>true</arg><!-- useLookupAdapter -->
</initMethod>
ポイントカットを指定している場合は第 3 引数に true を設定...
<initMethod name="addAspectCustomizer">
<arg>"requestInterceptor"</arg><!-- interceptorName -->
<arg>"do.*"</arg><!-- pointcut -->
<arg>true</arg><!-- useLookupAdapter -->
</initMethod>
この方法は[[Seasar]]2.4.9 以前では利用できません.
終了行:
[[FAQ]]
*S2AOP [#db17a433]
#contents
**複数のアスペクトを自動登録したい [#vb7922e6]
>[[S2サポーター]] (2006-04-29 (土) 19:34:12)~
~
''Question''~
over 2.3のAspectAutoRegisterを使って、自動登録へ切り替え...
~
ソースを拝見させていただきましたが、複数のアスペクトを自...
~
従来の記述で言えば、~
<component ...>
<aspect>aop.traseInterceptor</aspect>
<aspect>dao.interceptor</aspect>
</component>
のような場合です。~
~
~
''Answer''~
InterceptorChain を使うのがよいかと思います.~
~
<component name="traceAndDao" class="org.seasar.framewor...
<initMethod name="add">aop.traceInterceptor</initMet...
<initMethod name="add">dop.interceptor</initMethod>
</component>
~
としておいて,traceAndDao を AspectAutoRegister で設定.~
~
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2005-October/00...
http://ml.seasar.org/archives/seasar-user/2005-October/00...
//
**diconでOGNL式にaspect適用可能か? [#d29c919e]
>[[S2サポーター]] (2006-04-29 (土) 16:32:41)~
~
''Question''~
diconファイルで、OGNL式で取得したコンポーネントに対して~
アスペクトを適用するように記述することは可能でしょうか?~
~
以下のように書きたかったのですが、エラーになります。~
~
<component>
@hogeFactory @ HOGE
<aspect>hogeInterceptor</aspect>
</component>
~
''Answer''~
できません.~
~
S2AOP は,元のクラスを継承したサブクラスを作成します.~
アスペクトが適用されるのはそのサブクラスのインスタンスに~
なります.~
OGNL で取得したコンポーネントはすでにインスタンス化されて~
しまっており,S2AOP が作成したサブクラスのインスタンスでは~
ないためアスペクトは適用されません.~
~
DelegateInterceptor を使えばやりたいことが~
できるかもしれません.~
~
<component class="...">
<aspect>hogeInterceptor</aspect>
<aspect>
<component class="org.seasar.framework.aop.intercept...
<property name="target">@hogeFactory @ HOGE</prop...
</component>
</aspect>
</component>
~
一番外側の <component> 要素には class 属性を指定する必要...
インタフェースを指定しても構いません.このコンポーネント...
最初に hogeInterceptor が適用され,その後にDelegateInterc...
~
DelegateInterceptor は target プロパティに指定されたコン...
(同じメソッドを呼び出します).
~
当然ですが,コンテナから取得したコンポーネントのメソッド...
hogeFactory.HOGE のメソッドを呼び出してもダメです.~
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2006-April/0054...
http://ml.seasar.org/archives/seasar-user/2006-April/0054...
**アスペクト (インターセプタ) を singleton 以外にすること...
~
''Question''~
aspect (インターセプタ) のインスタンスモードを singleton ...
インスタンスモードを request にして HttpServletRequest の...
~
~
<component name="myInterceptor" instance="request" class...
<component name="myComponent" class="...">
<aspect>myInterceptor</aspect>
</component>
~
''Answer''~
*** [[Seasar]] 2.3.7 以前 [#qa5595ff]
インターセプタに [[InterceptorLifecycleAdapter:http://s2c...
~
S2AOP は,元のクラスを継承したサブクラスを作成する際にイ...
このため,インターセプタのインスタンスモードが prototype ...
~
このような場合には,インターセプタの instance 属性を prot...
※この方法はインターセプタが org.seasar.framework.aop.inte...
~
<include path="aop.dicon"/>
<component name="myInterceptor" instance="prototype" cla...
<aspect>aop.lifecycleAdapter</aspect>
</component>
<component name="myComponent" instance="request" class="...
<aspect>myInterceptor</aspect>
</component>
~
これにより,myInterceptor の invoke メソッドが呼ばれるた...
Client -> myInterceptor (コンテナ初期化時に取得) -> Inte...
という呼び出しシーケンスになります.最初の myInterceptor ...
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2005-December/0...
http://ml.seasar.org/archives/seasar-user/2005-December/0...
この方法は [[Seasar]] 2.3.8 以降では利用できません.
*** [[Seasar]] 2.3.13 以降 [#i45fc6c8]
対象のコンポーネントには InterceptorAdapter をアスペクト...
本来のインターセプタはインスタンスモードを prototype にし...
<component name="myInterceptor" instance="prototype" cla...
<component class="...">
<aspect>
<component class="org.seasar.framework.aop.intercept...
<initMethod name="add"><arg>"myInterceptor"</arg><...
</component>
</aspect>
</component>
これにより,InterceptorAdaptor の invoke メソッドが呼ばれ...
Client -> InterceptorAdaptor (コンテナ初期化時に取得) ->...
という呼び出しシーケンスになります.~
>
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2006-September/...
http://ml.seasar.org/archives/seasar-user/2006-September/...
この方法は[[Seasar]]2.3.12 以前では利用できません.
*** [[Seasar]]2.4.10 以降で SMART deploy を使う場合 [#q69...
インターセプタを適用する AspectCustomizer の useLookupAda...
<component class="org.seasar.framework.container.customi...
<property name="interceptorName">"requestInterceptor"<...
<property name="useLookupAdapter">true</property>
</component>
CustomizerChain#addAspectCustomizer を使っていて,ポイン...
<initMethod name="addAspectCustomizer">
<arg>"requestInterceptor"</arg><!-- interceptorName -->
<arg>true</arg><!-- useLookupAdapter -->
</initMethod>
ポイントカットを指定している場合は第 3 引数に true を設定...
<initMethod name="addAspectCustomizer">
<arg>"requestInterceptor"</arg><!-- interceptorName -->
<arg>"do.*"</arg><!-- pointcut -->
<arg>true</arg><!-- useLookupAdapter -->
</initMethod>
この方法は[[Seasar]]2.4.9 以前では利用できません.
ページ名: