Spring框架学习-IOC(getBean流程)

·  阅读 390
 Spring框架学习-IOC(getBean流程)

学习spring框架的心得与总结。附:spring源码注释地址github.com/LXPWing/spr…

getBean流程图:www.processon.com/view/link/6…

Bean的生命周期流程图:www.processon.com/view/link/6…

DI流程图:www.processon.com/view/link/6…

getBean流程

getBean流程中spring会先检查单例池中是否有此对象,有则返回,无则继续执行创建对象流程。

image.png

开始创建Bean对象

image.png

进入getSingleton方法,调用lamda表达式进入createBean(beanName,mbd,args)。

image.png

在createBean(beanName,mbd,args)中先会调用BeanPostProcessors(Bean的后置处理器)判断是否返回代理对象

image.png

不返回代理对象,则进入doCreateBean(beanName,mbdToUser,args)调用createBeanInstance(beanName,mbd,args)方法。

image.png

进入instantiateBean(beanName,mbd)通过策略模式选择对象创建方法,jdk的反射/Cglib。

image.png

进入getInstantiationStrategy().instantiate(mbd, beanName, this)。

image.png

最后调用BeanUtils.instantiateClass(constructorToUse)通过反射完成对象创建

image.png

以上步骤创建完对象,但未赋值

  • DI流程

创建完对象回到主流程,进入populateBean(beanName,mbd,instanceWrapper)准备给属性赋值image.png

进入方法首先判断,是否使用InstantiationAwareBeanPostProcessor后置处理器干预

image.png

根据不同的方式注入属性值(通过反射赋值)

image.png

回到主流程进入initializeBean(beanName,exposedObject,mbd)初始化Bean对象

image.png

BeanPostProcessor和InitializingBean后置处理器会干预已经完成的Bean对象

image.png

返回最终的Bean对象

分类:
后端
标签: