声明一个方面(Aspect)
当启用了@AspectJ支持时,应用程序上下文中定义的任何具有@AspectJ切面(带有@Aspect注解)类的bean都会被Spring自动检测到,并用于配置Spring AOP。接下来的两个示例展示了实现一个不是非常实用的切面所需的最小步骤。
两个示例中的第一个展示了在应用程序上下文中对一个常规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>
两个示例中的第二个展示了NotVeryUsefulAspect类的定义,该类被注解为@Aspect:
- Java
- Kotlin
@Aspect
public class NotVeryUsefulAspect {
}
@Aspect
class NotVeryUsefulAspect
方面(用@Aspect注解的类)可以像其他任何类一样拥有方法和字段。它们还可以包含切点(pointcut)、通知(advice)以及引入(inter-type)声明。
备注
通过组件扫描自动检测切面
你可以在Spring XML配置中将切面类注册为常规Bean,通过在@Configuration类中使用@Bean方法,或者让Spring通过类路径扫描来自动检测它们——这与检测其他任何由Spring管理的Bean的方式相同。但是,请注意,仅使用@Aspect注解并不足以在类路径中进行自动检测。为此,你需要添加一个单独@Component注解(或者,根据Spring组件扫描器的规则,使用一个自定义的 stereotypes 注解)。
备注
方面之间的建议关系?
在Spring AOP中,方面本身不能成为其他方面建议的目标。类上标注的@Aspect注解会将其标记为一个方面,因此,它会排除在自动代理之外。