[Seasar-user:3011] Re: [S2Container][S2AOP]相談 - aspectに適用するインスタンスのinstanceについて
Koichi Kobayashi
koichik
2005年 12月 10日 (土) 03:03:51 JST
小林 (koichik) です.
すみません,Kazuya さんと語っている間に見落としていました.
# と,他人のせいにしてみるテスト
Date: Wed, 07 Dec 2005 23:28:53 +0900
From: Hikaru Taniguchi <taniguchi @ furyu.omron.co.jp>
To: seasar-user @ lists.sourceforge.jp
Subject: [Seasar-user:3003] [S2Container][S2AOP]相談 - aspectに適用するインスタンスのinstanceについて
> つまり、interceptorのライフサイクルをprototypeやrequestにしたところで、
> aspect適用先のクラスをアドバンスするのは一度きりに見えるので、リクエス
> トごとに異なるアドバンスはできません。
はい,そうなります.
# これって以前も似たようなやり取りがあったので,FAQ 候補ですね.
> とすると、interceptorは S2Containerに依存してしまって、 containerから
> request,responseを貰う…というような方法しかないもんでしょうか?
そんなわけで (どんなわけで?),InterceptorLifecycleAdapter という
Interceptor を作ってみました.Interceptor にしかける Interceptor (汗).
添付のソースファイルを
seasar2/s2-framework/src/main/java/org/seasar/framework/aop/interceptors
にコピーして,
seasar2/s2-framework/src/test/resources/aop.dicon
に
<component name="lifecycleAdapter"
class="org.seasar.framework.aop.interceptors.InterceptorLifecycleAdapter"/>
を追加してください.
そしてお使いの MethodInterceptor の定義を
<include path="aop.dicon"/>
<component name="myIntercpetor" class="MyInterceptor" instance="request">
<aspect pointcut="invoke">aop.lifecycleAdapter</aspect>
</component>
などとするか,アノテーションで
@Component(name="myInterceptor", instance=REQUEST)
public class MyInterceptor implements MethodInterceptor {
@Aspect("aop.lifecycleAdapter")
public Object invoke(MethodInvocation invocation) throws Throwable {
などとしてください.
役に立つようであれば,この後 S2AOP に InterType 対応を追加する予定なので,
その時一緒に InterceptorLifecycleAdapter を含めたいと思います.
これで PrototypeDelegateInterceptor が不要になる気がしないでもない...
普通の DelegateInterceptor を instance="prototype" とかにしても,
こいつをしかければオッケー牧場 (死語?) な感じ.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>koichik @ improvement.jp</e-mail>
</signature>
-------------- next part --------------
テキスト形式以外の添付ファイルを除去しました...
ファイル名: InterceptorLifecycleAdapter.java
型: application/octet-stream
サイズ: 1697 バイト
説明: 無し
URL: http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20051210/e726ffe0/InterceptorLifecycleAdapter.obj
Seasar-user メーリングリストの案内