Spring AOP代理对象创建过程

Spring通过BeanPostProcessor帮我们实现代理对象的创建。这些代理对象的创建器有三类:
1、基于Bean名称在xml配置规则的自动代理创建器:BeanNameAutoProxyCretor
2、基于Advisor匹配机制的自动代理创建器:对容器所有的Advisor进行扫描,实现类为DefaultAdvisorAutoProxyCreator
3、基于Bean中的Aspect注解的自动代理创建器: AnnotationAwareAspectJAutoProxyCreator

其中第3种,基于Aspect注解创建代理的源码如下:


在spring实例化bean的过程中调用后置处理器

入口方法是在spring实例化bean的过程中调用后置处理器,循环遍历BeanPostProcessor,然后进入到AnnotationAwareAspectJAutoProxyCreator的postProcessAfterInitialization方法。代码如下:


调用AbstractAutoProxyCreateor的beanPostProcessor后置处理方法

然后在AbstractAutoProxyCreator类中通过wrapIfNecessary判断当前beanClass是否有切面相关的注解,有的话会获取beanClass下所有的Advisor,然后生成代理对象返回,并且保存到Spring容器中。

创建代理对象方法

image.png

所以Aspect注解的代理对象是在AbstractAutoProxyCreator中创建的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容