spring源码-createBean方法中的doCreateBean方法

具体去做bean的创建的操作,接下来我们就看这个方法

首先我们先拿到一个顶级的接口beanWrapper,首先判断我们传入的rootBeanDefinition是否是单例,如果是的话,那么就去缓存找是否有创建了的缓存,有的话就remove并且返回给instanceWrapper,这个this.factoryBeanInstanceCache存储的是由工厂生成的bean实例。如果工厂生成的bean实例没有的话就去createBeanInstance创建bean实例

在createBean方法中,只需要关注几个点即可

我们通过BeanDefinition获取到supplier,想要通过supplier来动态获取bean实例,如果有的话就直接返回由supplier创建的bean实例,还有就是通过工厂方法去创建一个bean或者拿到bean的实例,还有就是不同的实例化方式

自动装配构造函数

简单实例化那么这是createBeanInstance方法

我们再退出来看doCreateBean

继续往下,从instanceWrapper中拿到实例和class,然后做类型解析

然后下一块部分就是后置处理

做rootBeanDefinition的后置处理,做mergedBeanDefinition的处理,在doCreateBean之前的后置处理是对原始的beanDefinition进行处理并且上锁保证只执行一次

接着来看下一块

这里是解决依赖缓存的核心,提前暴露引用,通过getEarlyBeanReference从代理类的处理器,获取到一个代理类,同时addSingletonFactory会移除二级缓存的bean加入到三级缓存中

再看下一块代码

populateBean进行一个属性的注入处理autowired和value的注入依赖,然后做initializeBean初始化

再看下一块代码

做的是循环依赖的最终检查,检查是否被AOP代理替换,确保依赖注入的早期引用与最终 Bean 一致

最后一块

做销毁方法的注册

然后返回初始化的bean

 

总结就是

posted @ 2025-05-29 16:57  七森星罗  阅读(28)  评论(0)    收藏  举报