アスペクトを宣言する
@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 アノテーションは、それをアスペクトとしてマークするため、自動プロキシから除外します。 |