[seasar-dev:655] Re: AOPをかけた後にAnnotationを読むには
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 3月 9日 (金) 04:00:22 JST
小林 (koichik) です.
Date: Fri, 9 Mar 2007 02:52:23 +0900
From: 加藤 潤一 <[E-MAIL ADDRESS DELETED]>
To: "[E-MAIL ADDRESS DELETED]" <[E-MAIL ADDRESS DELETED]>
Subject: [seasar-dev:654] AOPをかけた後にAnnotationを読むには
> あるPOJOなクラスに
>
> org.seasar.framework.aop.interceptors.TraceInterceptor
>
> をかけてから、
>
> beanDesc.getMethod("doJobA").getAnnotation(Next.class);
>
> がnullを返すようになってしまったのですが、
S2AOP はアスペクトを適用するために動的にサブクラスを
作成し,メソッドをオーバーライドします.
そしてオーバーライドしたメソッドはアノテーションを
引き継ぎません.
そんなわけで (どんなわけで?),上記のコードだと
アスペクトが適用されたメソッドからアノテーションを
取得することはできません.
メソッドではなくクラスに付けられるアノテーションなら,
アノテーションに @Inherited を付ければいいのですが,
メソッドに付けたアノテーションでは無効なんですよね.
ともあれ (JW),コンポーネント・インスタンスから
getClass() すると,S2AOP がエンハンスしたクラスが
返ってきてしまうので,ComponentDef#getComponentClass()
するのがオススメです.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-dev メーリングリストの案内