声明切面

启用 @AspectJ 支持后,应用程序上下文中定义的任何具有 @AspectJ 切面(即带有 @Aspect 注解)的类,都会被 Spring 自动检测到,并用于配置 Spring AOP。接下来的两个示例展示了一个不太有用的切面所需的最小步骤。

第一个示例展示了应用程序上下文中的常规 bean 定义,它指向一个带有 @Aspect 注解的 bean 类:

第二个示例展示了 NotVeryUsefulAspect 类的定义,它带有 @Aspect 注解:

切面(带有 @Aspect 注解的类)可以拥有方法和字段,与任何其他类一样。它们还可以包含切入点、通知和引入(类型间)声明。

通过组件扫描自动检测切面

您可以在 Spring XML 配置中将切面类注册为常规 bean,通过 @Configuration 类中的 @Bean 方法,或者让 Spring 通过类路径扫描自动检测它们——与任何其他 Spring 管理的 bean 相同。但是请注意,@Aspect 注解不足以在类路径中进行自动检测。为此,您需要添加一个单独的 @Component 注解(或者,根据 Spring 组件扫描器的规则,添加一个自定义的限定构造型注解)。

用其他切面通知切面?

在 Spring AOP 中,切面本身不能成为其他切面的通知目标。类上的 @Aspect 注解将其标记为切面,因此将其排除在自动代理之外。