アスペクトを宣言する

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

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

  • Java

  • Kotlin

  • XML

public class ApplicationConfiguration {

	@Bean
	public NotVeryUsefulAspect myAspect() {
		NotVeryUsefulAspect myAspect = new NotVeryUsefulAspect();
		// Configure properties of the aspect here
		return myAspect;
	}
}
class ApplicationConfiguration {

	@Bean
	fun myAspect() = NotVeryUsefulAspect().apply {
		// Configure properties of the aspect here
	}
}
<bean id="myAspect" class="org.springframework.docs.core.aop.ataspectj.aopataspectj.NotVeryUsefulAspect">
	<!-- configure properties of the aspect here -->
</bean>

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

  • Java

  • Kotlin

@Aspect
public class NotVeryUsefulAspect {
}
@Aspect
class NotVeryUsefulAspect

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

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