[Seasar-user:6193] Re: AspectAutoRegister を cooldeploy で記述するには
o.h.
[E-MAIL ADDRESS DELETED]
2007年 2月 15日 (木) 12:03:11 JST
長谷川です.
小林様、ありがとうございます.
咀嚼しきれていない部分もありますが、実現方法は理解できました.
あとは、いろいろ試しながらやってみます.
以上
Koichi Kobayashi wrote:
> SMART deploy としては,コンポーネントのクラスに
> アノテーションで指定することになります.
>
> @Aspect("xxxInterceptor")
> public class HogeServiceImpl implements HogeService {
> ...
> }
>
> 独自のアノテーションを作成することもできます.
>
> @Retention(RetentionPolicy.RUNTIME)
> @Target( { ElementType.TYPE, ElementType.METHOD })
> @Interceptor
> public @interface Xxx {
> String pointcut() default "";
> }
>
> というアノテーションを作成して
>
> @Xxx
> public class HogeServiceImpl implements HogeService {
> ...
> }
>
> この場合,クラス名をデキャピタライズした後ろに Interceptor を
> 付けたもの (xxxInterceptor) がインターセプタのコンポーネント名に
> なります.これを変更するには @Interceptor でインターセプタの
> コンポーネント名を指定します.
>
> @Retention(RetentionPolicy.RUNTIME)
> @Target( { ElementType.TYPE, ElementType.METHOD })
> @Interceptor("hogeInterceptor")
> public @interface Xxx {
> String pointcut() default "";
> }
>
> とします.
>
> あるいは EJB3 のアノテーションを使って
>
> @Stateless
> @Interceptors(XxxInterceptor.class)
> public class HogeServiceImpl implements HogeService {
> ...
> }
>
> この場合のインターセプタは Seasar2 (AOP アライアンス)
> のものではなく,EJB3 のものになります.
>
> いずれの場合も,アノテーションをインタフェースに付けても
> 効果がありません.実装クラスに付ける必要があります.
>
> また,最初の @Aspect アノテーションはスーパークラスに
> 付けても効果がなく,末端のクラスに付ける必要があります.
>
> 独自アノテーションの場合は,独自のアノテーションに
> @Inherited を付けることで,スーパークラスに付けた
> アノテーションが有効になります.
>
> どのアノテーションも,クラスだけでなくメソッドに
> 指定することもできます.
>
>
--
_/_/
_/_/ mailto: [E-MAIL ADDRESS DELETED]
_/_/ (deprecated: [E-MAIL ADDRESS DELETED])
_/_/
Seasar-user メーリングリストの案内