アスペクトを宣言する

@AspectJ サポートを有効にすると、@AspectJ アスペクト (@Aspect アノテーションを持つ) であるクラスを使用してアプリケーションコンテキストで定義された Bean は、Spring によって自動的に検出され、Spring AOP の構成に使用されます。次の 2 つの例は、あまり役に立たないアスペクトに必要な最小限の手順を示しています。

2 つの例のうち最初の例は、アプリケーションコンテキスト内の通常の Bean 定義を示しています。この定義は、@Aspect でアノテーションが付けられた Bean クラスを指しています。

<bean id="myAspect" class="com.xyz.NotVeryUsefulAspect">
	<!-- configure properties of the aspect here -->
</bean>

2 つの例の 2 番目は、@Aspect でアノテーションが付けられた NotVeryUsefulAspect クラス定義を示しています。

  • Java

  • Kotlin

package com.xyz;

import org.aspectj.lang.annotation.Aspect;

@Aspect
public class NotVeryUsefulAspect {
}
package com.xyz

import org.aspectj.lang.annotation.Aspect

@Aspect
class NotVeryUsefulAspect

アスペクト(@Aspect アノテーションが付けられたクラス)は、他のクラスと同じようにメソッドとフィールドを持つことができます。また、ポイントカット、アドバイス、導入(型間)宣言を含めることもできます。

コンポーネントのスキャンによるアスペクトの自動検出
アスペクトクラスは、@Configuration クラスの @Bean メソッドを介して Spring XML 構成に通常の Bean として登録するか、他の Spring 管理の Bean と同じように、クラスパススキャンを介して Spring に自動検出させることができます。ただし、@Aspect アノテーションは、クラスパスでの自動検出には不十分であることに注意してください。そのためには、個別の @Component アノテーション(または、Spring のコンポーネントスキャナーのルールに従って適格となるカスタムステレオタイプアノテーション)を追加する必要があります。
アスペクトを他のアスペクトにアドバイスできますか?
Spring AOP では、アスペクト自体を他のアスペクトからのアドバイスの対象にすることはできません。クラスの @Aspect アノテーションは、それをアスペクトとしてマークするため、自動プロキシから除外します。