前言:
由于动态代理对象的创建并不需要也不会去干预bean的实例化、属性赋值、初始化。而初始化结束才意味着bean被创建完成,因此Spring会等到bean初始化之后,也就是执行完 .invokeInitMethods()方法。才会将相关的横切逻辑织入到bean里。Spring的横切逻辑主要放在了初始化bean之后的applyBeanPostProcessorsAfterInitialization().BeanPostProcessor.postProcessAfterInitialization()。
在initializeBean()方法对Bean的初始化之后呢,AbstractAutoProxyCreator实现了SmartInstantiationAwareBeanPostProcessor接口,从而就会调用类下的postProcessAfterInitialization()方法对bean进行横切逻辑的织入。方法中会调用warpIfNecessary()对Bean进行横切逻辑的织入,warpIfNecessary方法中会调用createProxy()开始执行创建动态代理的逻辑,而createProxy方法会委托动态代理的创建工厂的getProxy()方法,根据不同的策略来决定使用JDK的或者是CGLIB的动态代理
横切逻辑织入的入口方法:
postProcessAfterInitialization:正常流程的织入入口
getEarlyBeanReference:依赖循环的织入入口
原文:https://www.cnblogs.com/zcl1116/p/14475380.html