アノテーションインターフェース EnableAspectJAutoProxy


@TargetSE(TYPESE) @RetentionSE(RUNTIMESE) @DocumentedSE @Import(org.springframework.context.annotation.AspectJAutoProxyRegistrar.class) public @interface EnableAspectJAutoProxy
Spring の <aop:aspectj-autoproxy> XML 要素にある機能と同様に、AspectJ の @Aspect アノテーションでマークされたコンポーネントの処理のサポートを有効にします。次のように @Configuration クラスで使用されます。
 @Configuration
 @EnableAspectJAutoProxy
 public class AppConfig {

     @Bean
     public FooService fooService() {
         return new FooService();
     }

     @Bean
     public MyAspect myAspect() {
         return new MyAspect();
     }
 }
ここで、FooService は典型的な POJO コンポーネントであり、MyAspect は @Aspect スタイルの側面です。
 public class FooService {

     // various methods
 }
 @Aspect
 public class MyAspect {

     @Before("execution(* FooService+.*(..))")
     public void advice() {
         // advise FooService methods as appropriate
     }
 }
上記のシナリオでは、@EnableAspectJAutoProxy は、MyAspect が適切に処理され、FooService が貢献するアドバイスでプロキシ化されることを保証します。

ユーザーは、proxyTargetClass() 属性を使用して、FooService 用に作成されるプロキシの型を制御できます。以下は、デフォルトのインターフェースベースの JDK プロキシアプローチとは対照的に、CGLIB スタイルの「サブクラス」プロキシを有効にします。

 @Configuration
 @EnableAspectJAutoProxy(proxyTargetClass=true)
 public class AppConfig {
     // ...
 }

@Aspect Bean は、他のコンポーネントと同様にコンポーネントスキャンされる場合があることに注意してください。@Aspect と @Component の両方でアスペクトをマークするだけです:

 package com.foo;

 @Component
 public class FooService { ... }

 @Aspect
 @Component
 public class MyAspect { ... }
次に、@ComponentScan アノテーションを使用して両方を取得します。
 @Configuration
 @ComponentScan("com.foo")
 @EnableAspectJAutoProxy
 public class AppConfig {

     // no explicit @Bean definitions required
 }
注: @EnableAspectJAutoProxy はローカルアプリケーションコンテキストにのみ適用され、異なるレベルで Bean の選択的プロキシを許可します。動作を複数のレベルで適用する必要がある場合は、@EnableAspectJAutoProxy を個々のコンテキスト、たとえば、共通ルート Web アプリケーションコンテキストや個別の DispatcherServlet アプリケーションコンテキストで再宣言してください。

この機能を使用するには、クラスパスに aspectjweaver が存在する必要があります。この依存関係は、一般に spring-aop ではオプションですが、@EnableAspectJAutoProxy およびその基礎となる機能には必須です。

導入:
3.1
作成者:
Chris Beams, Juergen Hoeller
関連事項:
  • オプション要素のサマリー

    オプション要素
    修飾子と型
    オプションの要素
    説明
    boolean
    AopContext クラスを介して取得するために、プロキシを ThreadLocal として AOP フレームワークによって公開する必要があることを示します。
    boolean
    標準の Java インターフェースベースのプロキシではなく、サブクラスベース(CGLIB)のプロキシを作成するかどうかを示します。
  • 要素の詳細

    • proxyTargetClass

      boolean proxyTargetClass
      標準の Java インターフェースベースのプロキシではなく、サブクラスベース(CGLIB)のプロキシを作成するかどうかを示します。デフォルトは false です。
      デフォルト:
      false
    • exposeProxy

      boolean exposeProxy
      AopContext クラスを介して取得するために、プロキシを ThreadLocal として AOP フレームワークによって公開する必要があることを示します。デフォルトではオフです。つまり、AopContext アクセスが機能するという保証はありません。
      導入:
      4.3.1
      デフォルト:
      false