声明一个切面
启用@AspectJ支持后,应用程序上下文中定义的任何bean,其类是一个@AspectJ切面(具有@Aspect
注解)将被Spring自动检测并用于配置Spring AOP。接下来的两个示例展示了声明一个不太有用的切面所需的最小步骤。
这两个示例中的第一个展示了应用程序上下文中的常规bean定义,指向一个使用@Aspect
注解的bean类:
<bean id="myAspect" class="com.xyz.NotVeryUsefulAspect">
<!-- 在这里配置切面的属性 -->
</bean>
这两个示例中的第二个展示了使用@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
注解的类)可以拥有方法和字段,与任何其他类一样。它们还可以包含切点、通知和引入(接口类型)声明。
通过组件扫描自动检测切面
您可以在Spring XML配置中将切面类注册为常规bean,通过@Configuration 类中的@Bean 方法,或者让Spring通过类路径扫描自动检测它们,与任何其他Spring管理的bean一样。但是,请注意,@Aspect 注解不足以在类路径中进行自动检测。为此,您需要添加一个单独的@Component 注解(或者,作为Spring组件扫描器规则的替代方案,一个自定义的构造型注解)。 |
使用其他切面来提供通知?
在Spring AOP中,切面本身不能成为其他切面提供通知的目标。类上的@Aspect 注解将其标记为切面,因此排除它们自动代理。 |