在SpringBoot项目中,当我们想使用Spring AOP的功能,我们首先要做的是引入aop的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
我们无需自定义aop相关的配置类,因为在autoconfigure包中已经有了对aop的自动配置及AopAutoConfiguration
该类启用了@Aspect注解,同时读取spring.aop.proxy-target-class属性(默认为true)设置默认代理为cglib
@Configuration(proxyBeanMethods = false)
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
static class JdkDynamicAutoProxyConfiguration {
}
@Configuration(proxyBeanMethods = false)
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
static class CglibAutoProxyConfiguration {
}
所以在SpringBoot项目中即使你想要实现切面逻辑的目标对象实现了接口,依然用的cglib代理。当然你可以通过在spring的配置文件中设置spring.aop.proxy-target-class为false重新设置默认代理为jdk proxy