[Seasar-user:407] Re: Advice のスタック

B isid.co.jp Yasuo Higa higa
2004年 3月 3日 (水) 14:03:45 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:404] Adviceのスタック" において、
   "Masataka Kurihara <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> 栗原です。
> 
>   まずここ2日みて、Seasarでほしい機能の1/2です。
> 
> ・Adviceを同一Joinpointにスタックしたい〜
> 
> public class Bootstrap {
>   public static void main(String[] args) {
>     // コンテナ準備
>     S2Container container = new S2ContainerImpl();
>     ComponentDef compDef = new ComponentDefImpl(SpeakerImpl.class);
>     container.register(compDef);
>     Pointcut pointcut = new PointcutImpl(new String[]{"say"});
>     AspectDef aspectDef1 = 
>       new AspectDefImpl(new TraceAdvice(), pointcut);
>     AspectDef aspectDef2 = 
>       new AspectDefImpl(new TestAdvice(), pointcut);
>     compDef.addAspectDef(aspectDef1);
>     compDef.addAspectDef(aspectDef2);
> 
>     // クライアント実行
>     Speaker speaker = (Speaker)container.getComponent(Speaker.class);
>     speaker.say();
>   }
> }
> 
>   いまのAPIで同じPointcutにAdviceを複数登録しようとすると、上のコードに
> なるかと思うのですが、クライアント実行しての結果ははじめに登録した 
> TraceAdvice が動いて結果を返します。二番目に登録した TestAdvice は動作
> しません。実際にも、ログを出すAdvice仕込んだら他のAOPコンポーネント使
> えないのは困るかと。。。
> 
いやだいじょうぶなはずですけど。
test.org.seasar.framework.aop.impl.JoinpointImplTest#testProceed()で
テストされています。

試しに、
S2Container container = new S2ContainerImpl();
ComponentDef componentDef = new ComponentDefImpl(ArrayList.class);
AspectDef aspectDef = new AspectDefImpl(new TraceAdvice());
componentDef.addAspectDef(aspectDef);
componentDef.addAspectDef(aspectDef);
container.register(componentDef);
List list = (List) container.getComponent(List.class);
list.size();
で試してみましたが、結果は、
BEGIN java.util.ArrayList#size()
BEGIN java.util.ArrayList#size()
END java.util.ArrayList#size() : 0
END java.util.ArrayList#size() : 0
です。
TraceAdviceは、Jointpoint#proceed()の前後に
トレースするように変えてありますが、
スタックされたAdviceが呼び出されてます。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.

> --
> 株式会社グルージェント
> 栗原 傑享(くりはら まさたか)
> 渋谷区渋谷3-7-6 第6矢木ビル4F
> TEL:03-5469-8869 FAX:03-5469-8879
> URL:http://www.gluegent.com/
> --
> 
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user
> 



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