赞
踩
目录
2.AspectJAwareAdvisorAutoProxyCreator创建AOP的过程
2.1 postProcessBeforeInstantiation方法执行
2.2 postProcessAfterInitialization方法
Spring的两大特性为IOC和AOP,所以想要彻底的去了解和熟悉Spring或者SpringBoot,那么IOC和AOP是首当其冲需要去了解和熟悉他们原理的,不然都不好意思说自己了解SpringBoot,更别说能够用好SpringBoot了。
SpringBoot是如何去实现AOP的呢?通过几个简单的注解就可以实现方法的增强,其中的原理又是什么呢,这篇文章就来详细的分析一下SpringBoot实现AOP的原理。
SpringBoot实现的几乎所有的功能都是通过SpringBoot提供的各种扩展点来实现的,而实现AOP则是依赖扩展点InstantiationAwareBeanPostProcessor来实现的,关于这个扩展点的具体作用,以及执行的时间可以直接参考这篇文章《》
SpringBoot通过AspectJ来实现动态代理,从而来实现来实现AOP增强。而注解@EnableAspectJAutoProxy正是开启AspectJ动态代理的注解
注解引入了AspectJAutoProxyRegistrar
AspectJAutoProxyRegistrar类中通过BeanDefinitionRegistry注册了AnnotationAwareAspectJAutoProxyCreator,这个类正式实现AOP增强逻辑的关键所在
该类实现了 InstantiationAwareBeanPostProcessor,所以下面分析AOP实现原理的思路就是按照该扩展点执行的时机去看具体的实现逻辑。
SpringBoot创建Bean的过程想必都已经是有所了解的了,所以直接进入到AbstractAutoWireCapableBeanFactory#createBean方法
这个方法里面会先执行 InstantiationAwareBeanPostProcessor的resolveBeforeInstantiation方法。所以这里看AspectJAwareAdvisorAutoProxyCreator的resolveBeforeInstantiation的方法逻辑。
可以看到这里执行了AbstractAutoProxyCreator#postProcessBeforeInstantiation方法,方法里面的逻辑为:
在执行initmethod的前后分别执行了BeanPostProcess的前置方法和后置方法,AOP的实现逻辑主要在后置方法中执行。
进入AbstractAutoProxyCreator的后置方法
其中wrapIfNecessary就是实现AOP的主要逻辑代码
getAdvicesAdnAdvisorsForBean方法会先查询到所有的切面,并且根据当前的类,找到当前类所匹配的切面,这里直接看结果
这里匹配到了我定义的前置和后置切面方法
getAdvicesAdnAdvisorsForBean方法里面的具体逻辑可以看这篇文章,写的非常详细SpringBoot的AOP原理http://t.csdnimg.cn/OSYDB
进入到AbstractAutoProxyCreator#createProxy方法
方法里面先设置了代理类和代理接口-->将切面Advisor放入到ProxyFactory中-->设置需要代理的类-->最后调用ProxyFactory的getProxy方法创建代理对象。
这里直接看一下创建并且返回的代理对象
代理对象中就包括了所有的切面方法
SpringBoot的AOP就是利用SpringBoot提供的扩展点在Spring的Bean的生命周期的过程中去操作和增强Bean。其中使用到的扩展点为InstantAwareBeanPostProcessor
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。