5.4.2. 声明一个切面

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

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

<bean id="myAspect" class="org.xyz.NotVeryUsefulAspect">
    <!-- configure properties of the aspect here -->
</bean>

两个示例中的第二个显示了NotVeryUsefulAspect类定义,它使用注解org.aspectj.lang.annotation.Aspect

package org.xyz;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class NotVeryUsefulAspect {

}

切面(用@Aspect 注解的类)可以具有方法和字段,与任何其他类相同。它们还可以包含切入点、通知和介绍(类型间)声明。

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

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

最后更新于