アノテーションインターフェース 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 を選択的にプロキシできます。複数のレベルでその動作を適用する必要がある場合は、共通のルート Web アプリケーションコンテキストと個別の DispatcherServlet アプリケーションコンテキストなど、各コンテキストで @EnableAspectJAutoProxy を再宣言してください。

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

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

    オプション要素
    修飾子と型
    オプションの要素
    説明
    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