Spring AOP源码分析(三):基于JDK动态代理和CGLIB创建代理对象的实现原理
風如影:
AbstractAutoProxyCreator的postProcessBeforeInstantiation方法中在创建代码之前先通过getCustomTargetSource获取自定义的TargetSource,如果为空则不会创建代理。上面那段注释也说了,Create proxy here if we have a custom TargetSource,从而抑制目标bean不必要的默认实例化,如果没有custom TargetSource是不会创建代理的。
而大部分AOP代理类的创建主要在两个地方,一个是当出现循环依赖时通过三级缓存singletonFactory获取bean实例对象时,这个singletonFactory是在在doCreateBean早期添加的,即getEarlyBeanReference;第二个地方是初始化完调用applyBeanPostProcessorsAfterInitialization,也就是AbstractAutoProxyCreator的postProcessAfterInitialization方法。这两个都是通过调用内部的wrapIfNecessary进入创建AOP代理类过程。
我看的spring版本是5.2.22, 如果有理解不对的地方,请大神给予指正,谢谢
|