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

    两个例子中的第一个显示了应用程序上下文中的一个普通 Bean 定义,它指向一个具有@Aspect注解的 Bean 类:

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

    两个例子中的第二个展示了 NotVeryUsefulAspect 类的定义,它被 org.aspectj.lang.annotation.Aspect注解了。

    1. package org.xyz;
    2. import org.aspectj.lang.annotation.Aspect;
    3. @Aspect
    4. public class NotVeryUsefulAspect {
    5. }

    Aspects(用 @Aspect 注解的类)可以有方法和字段,和其他类一样。它们也可以包含 pointcut、advice 和 引入(inter-type)声明。

    :::info 通过组件扫描自动检测 aspect

    你可以通过 @Configuration 类中的 @Bean 方法,将 aspect 类注册为 Spring XML 配置中的普通 Bean,或者让 Spring 通过 classpath 扫描自动检测它们 — 与任何其他 Spring 管理的 Bean 一样。然而,请注意,@Aspect 注解并不足以在 classpath 中进行自动检测。为此,你需要添加一个单独的 @Component注解(或者,根据 Spring 组件扫描器的规则,添加一个符合条件的自定义元注解)。 :::

    :::info 用切面为其他切面提供增强?

    在 Spring AOP 中,aspect 本身不能成为其他切面的增强的目标。类上的 @Aspect 注解标志着它是一个切面,因此,它被排除在自动代理之外。 :::