带着问题看源码-spring aop(一)

问题一:Spring Boot的默认配置在哪

  • Spring使用aop的时候会在配置类上加上@EnableAspectJAutoProxy开启aop功能,Spring Boot在引入spring-boot-starter-aop之后并不需要做其他配置,aop功能是怎么开启的?

pom文件中添加spring-boot-starter-aop依赖之后,依赖包aspectjweaver-1.9.4.jar[目前使用到的boot版本是2.1.5]添加进来,在spring-boot-autoconfigure自动配置模块中可以看到aop自动配置类的源码

@Configuration
@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class,
      AnnotatedElement.class })
@ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true",
      matchIfMissing = true)
public class AopAutoConfiguration {

  @Configuration
  @EnableAspectJAutoProxy(proxyTargetClass = false)
  @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class",
          havingValue = "false", matchIfMissing = false)
  public static class JdkDynamicAutoProxyConfiguration {

  }

  @Configuration
  @EnableAspectJAutoProxy(proxyTargetClass = true)
  @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class",
          havingValue = "true", matchIfMissing = true)
  public static class CglibAutoProxyConfiguration {

  }

}

因为aspectjweaver-1.9.4.jar添加之后,@ConditionalOnClass这个注解需要的条件已经可以满足了.spring.aop.auto这个属性我们并没有在自己的配置文件中配置,我们可以在spring-boot-autoconfigure这个模块中的META-INFO/spring-configuration-metadata.json中找到如下配置信息

{
     "name": "spring.aop.auto",
     "type": "java.lang.Boolean",
     "description": "Add @EnableAspectJAutoProxy.",
     "defaultValue": true
},
{
     "name": "spring.aop.proxy-target-class",
     "type": "java.lang.Boolean",
     "description": "Whether subclass-based (CGLIB) proxies are to be created >>(true), as opposed to standard Java interface-based proxies (false).",
     "defaultValue": true
}

可以看出来spring.aop.auto是spring boot的默认配置属性,所以@ConditionalOnProperty所需要的条件也满足了,AopAutoConfiguration这个组件会在spring容器中创建.因为spring.aop.proxy-target-class这个属性的默认配置为true,所以CgligAutoProxyConfiguration这个组件会在spring容器中创建.可以看出来spring boot2.1.5这个版本aop的代理默认使用的cglib动态代理.

  • spring boot默认的配置信息可以在哪里查看
  • 方式一:可以在spring-boot-autoconfigure这个模块中的META-INFO/spring-configuration-metadata.json中查看
  • 方式二:可以通过spring boot的官网提供的docs进行查看
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容