アノテーションインターフェース 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
- 関連事項:
オプション要素の概要
オプション要素修飾子と型オプションの要素説明boolean
AopContext
クラスを介して取得するために、プロキシをThreadLocal
として AOP フレームワークによって公開する必要があることを示します。boolean
標準の Java インターフェースベースのプロキシではなく、サブクラスベース(CGLIB)のプロキシを作成するかどうかを示します。
要素の詳細
proxyTargetClass
boolean proxyTargetClass標準の Java インターフェースベースのプロキシではなく、サブクラスベース(CGLIB)のプロキシを作成するかどうかを示します。デフォルトはfalse
です。- デフォルト:
- false
exposeProxy
boolean exposeProxyAopContext
クラスを介して取得するために、プロキシをThreadLocal
として AOP フレームワークによって公開する必要があることを示します。デフォルトではオフです。つまり、AopContext
アクセスが機能するという保証はありません。- 導入:
- 4.3.1
- デフォルト:
- false