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

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

@EnableAspectJAutoProxy

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

源码解析

@EnableAspectJAutoProxy注解
在这里插入图片描述
进入@EnableAspectJAutoProxy注解

在这里插入图片描述

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

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

EnableAspectJAutoProxy解析:

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

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

在这里插入图片描述
在这里插入图片描述

总结:

1)将AnnotationAwareAspectJAutoProxyCreator注册到Spring容器中
2)AnnotationAwareAspectJAutoProxyCreator类的postProcessAfterInitialization()方法将所有有advice的bean重新包装成proxy
发布了29 篇原创文章 · 获赞 21 · 访问量 659

猜你喜欢

转载自blog.csdn.net/xueguchen/article/details/103770186