|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
声明一个切面
启用 @AspectJ 支持后,应用程序上下文中任何类带有 @AspectJ 切面(即使用了 @Aspect 注解)的 bean 都会被 Spring 自动检测,并用于配置 Spring AOP。接下来的两个示例展示了实现一个不太有用的切面所需的最少步骤。
前两个示例中的第一个展示了一个在应用上下文中指向带有 @Aspect 注解的 bean 类的常规 bean 定义:
<bean id="myAspect" class="com.xyz.NotVeryUsefulAspect">
<!-- configure properties of the aspect here -->
</bean>
两个示例中的第二个展示了 NotVeryUsefulAspect 类的定义,该类使用了 @Aspect 注解:
-
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 注解的类)可以拥有方法和字段,与任何其他类相同。它们还可以包含切入点(pointcut)、通知(advice)和引入(introduction,也称为类型间)声明。
通过组件扫描自动检测切面
您可以在 Spring XML 配置中将切面类注册为普通 Bean,
也可以在 @Bean 类中通过 @Configuration 方法进行注册,
或者让 Spring 通过类路径扫描自动检测它们——与其他任何 Spring 管理的 Bean 相同。
然而,请注意,仅使用 @Aspect 注解并不足以在类路径中实现自动检测。
为此,您需要额外添加一个 @Component 注解(或者,也可以使用符合 Spring 组件扫描器规则的自定义构造型注解)。 |
使用其他切面来通知(advising)切面?
在 Spring AOP 中,切面本身不能成为其他切面的通知目标。类上的 @Aspect 注解将其标记为一个切面,因此会将其排除在自动代理(auto-proxying)之外。 |