声明切面

启用 @AspectJ 支持后,应用程序上下文中定义的任何具有 @AspectJ 方面类的 Bean(具有@Aspect 注解)都会被 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 注解的类)可以具有方法和字段,与任何其他类相同。它们还可以包含切点、建议和介绍(类型间)声明。

通过组件扫描自动检测方面
您可以通过@Configuration 类中的@Bean 方法,在 Spring XML 配置中将方面类注册为常规 Bean,或者让 Spring 通过类路径扫描自动检测它们——与任何其他 Spring 托管的 Bean 相同。但是,请注意,@Aspect 注解不足以进行类路径自动检测。为此,您需要添加一个单独的@Component 注解(或者,根据 Spring 组件扫描器的规则,添加一个合格的自定义原型注解)。
用其他方面建议方面?
在 Spring AOP 中,方面本身不能成为其他方面建议的目标。类上的@Aspect 注解将其标记为一个方面,因此将其排除在自动代理之外。