当前位置:   article > 正文

spring创建aop代理对象流程分析_springbean aop对象的船舰过程

springbean aop对象的船舰过程

1.在实例化bean之后会调用AbstractAutowireCapableBeanFactory的applyBeanPostProcessorsAfterInitialization方法,该方法会找到所有实例化好的BeanPostProcessor对bean进行后置处理

2.AbstractAutoProxyCreator的postProcessAfterInitialization方法会调用wrapIfNecessary方法对当前bean进行判断是否需要包装。判断的逻辑是首先找到容器里的所有advisor,然后遍历每一个advisor使用canApply方法去当前bean进行验证是否可以作用用当前bean,不同的advisor有不同的验证逻辑这里就先不展开了。

3.通过getAdvicesAndAdvisorsForBean方法执行完之后返回advice和advisor类型的数组,如果数组不为空则对当前bean进行包装。下面既然createProxy方法。在这个方法里最关键做两件事1创建一个ProxyFactory,2找到当前AbstractAutoProxyCreator类中的其它interceptorNames加入specificInterceptors并对所有specificInterceptors进行包装,包装逻辑可以自己debug细究。

4.下面就调用ProxyFactory的getProxy方法获取代理类。在getProxy方法里会调用父类ProxyCreatorSupport的createAopProxy方法先获取AopProxy实例。ProxyCreatorSupport类集成了一个AopProxyFactory实例用于抽象创建AopProxy实例方法,默认使用DefaultAopProxyFactory工厂生产AopProxy实例。在DefaultAopProxyFactory工厂里根据bean的class类型判断是生产cglib的动态代理还是jdk的

5.这里就看cglib的情况返回了ObjenesisCglibAopProxy对象。调用ObjenesisCglibAopProxy对象的getProxy方法时会调用其父类CglibAopProxy的的getProxy方法,在getProxy方法里也就是实例化及初始化一个Enhancer对象还有就是获取callback

 

6.最后就是调用子类ObjenesisCglibAopProxy的createProxyClassAndInstance方法通过kryo生成具体代理类并设置callback

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/943092
推荐阅读
相关标签
  

闽ICP备14008679号