Spring之AOP小结(三)源码解析

@EnableAspectJAutoProxy

在Sping框架中,一般情况下都是使用@EnableAspectJAutoProxy开启AOP

源码解析

@EnableAspectJAutoProxy注解
Spring之AOP小结(三)源码解析
进入@EnableAspectJAutoProxy注解

Spring之AOP小结(三)源码解析

参数解析:
  • boolean proxyTargetClass() default false;
    控制aop的具体实现方式,为true 的话使用cglib,为false的话使用java的Proxy,默认为false
    指示是否创建基于子类(CGLIB)的代理,而不是标准的基于Java接口的代理

  • boolean exposeProxy() default false;
    控制代理的暴露方式,解决内部调用不能使用代理的场景,默认为false.

EnableAspectJAutoProxy解析:

核心注解是@Import(AspectJAutoProxyRegistrar.class)
Spring之AOP小结(三)源码解析
进入注解@Import(AspectJAutoProxyRegistrar.class)中的AspectJAutoProxyRegistrar类中,其核心的地方是AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry), 一个AOP的工具类,这个工具类的主要作用是把AnnotationAwareAspectJAutoProxyCreator这个类定义为BeanDefinition放到spring容器中,这是通过实现ImportBeanDefinitionRegistrar接口来装载的。Spring之AOP小结(三)源码解析
AnnotationAwareAspectJAutoProxyCreator关系图:
Spring之AOP小结(三)源码解析

从上图可以了解到,AnnotationAwareAspectJAutoProxyCreator这个类实现了一系列Aware的接口,在Bean装载的时候获BeanFactory(Bean容器),Bean的ClassLoader,还实现了order接口,继承了PorxyConfig,ProxyConfig中主要封装了代理的通用处理逻辑,比如设置目标类,设置使用cglib还是java proxy等一些基础配置。
最顶部的抽象类:AbstractAutoProxyCreator

Spring之AOP小结(三)源码解析
Spring之AOP小结(三)源码解析

总结:

1)将AnnotationAwareAspectJAutoProxyCreator注册到Spring容器中
2)AnnotationAwareAspectJAutoProxyCreator类的postProcessAfterInitialization()方法将所有有advice的bean重新包装成proxy

相关文章:

  • 2022-01-15
  • 2021-06-06
  • 2021-11-08
  • 2021-12-24
  • 2021-10-03
  • 2021-04-21
  • 2021-09-23
猜你喜欢
  • 2021-09-18
  • 2021-07-14
  • 2021-06-09
  • 2021-06-04
  • 2022-02-27
  • 2021-12-17
相关资源
相似解决方案