AOP(Aspect Oriented Programming),在经历了代码生成、动态代理、字节码增强甚至静态编译等不同时代的洗礼之后,Java 平台上的 AOP 方案基本上已经以 SpringAOP 结合 AspectJ 的方式稳固下来。

现在 Spring 框架提供的 AOP 方案倡导了一种各取所长的方案,即使用 SpringAOP 的面向对象的方式来编写和组织织入逻辑,并使用 AspectJ 的 Pointcut 描述语言配合 Annotation 来标注和指明织入点(Jointpoint)。

原则上来说,我们只要引入 Spring 框架中 AOP 的相应依赖就可以直接使用 Spring 的 AOP 支持了,不过,为了进一步为大家使用 SpringAOP 提供便利,SpringBoot 还是“不厌其烦”地为我们提供了一个 spring-boot-starter-aop 自动配置模块。

spring-boot-starter-aop 自动配置行为由两部分内容组成:

位于 spring-boot-autoconfigure的org.springframework.boot.autoconfigure.aop.AopAutoConfiguration 提供 @Configuration 配置类和相应的配置项。
spring-boot-starter-aop 模块自身提供了针对 spring-aop、aspectjrt 和 aspectjweaver 的依赖。
一般情况下,只要项目依赖中加入了 spring-boot-starter-aop,其实就会自动触发 AOP 的关联行为,包括构建相应的 AutoProxyCreator,将横切关注点织入(Weave)相应的目标对象等,不过 AopAutoConfiguration 依然为我们提供了两个配置项,用来有限地干预 AOP 相关配置:

spring.aop.auto=true
spring.aop.proxy-target-class=false
对我们来说,这两个配置项的最大意义在于:允许我们投反对票,比如可以选择关闭自动的 aop 配置(spring.aop.auto=false),或者启用针对 class 而不是 interface 级别的 aop 代理(aop proxy)。