[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 メーリングリストの案内