spring Bean的创建

spring getBean的入口是在

一:查看缓存

解析一下获取条件,getSingleton()查看缓存有没有

 如果有就调用getObjectForBeanInstance方法,这个方法在doGetBean里返回Bean的时候似乎都会执行一次,等会再看

二:检查本地和父工厂

先检查这个bean是不是作用域是不是原型,如果出现原型的话,可能循环依赖啥的处理不了就抛出异常

再去检查一下现在的工厂有没有父工厂或者有没有这个Bean的BeanDefinition,如果有父工厂且没有这个Bean的BeanDefinition再去父工厂检查有没有这个Bean。

三:创建bean

获取Bean的生命周期期间的各个属性BeanDefinition

再去寻找Bean所依赖的各个Bean,这一块有机会再看

 之后在进行Bean的创建和实例化

先是创建singleton

 我们先进getSingleton(String BeanName, ObjectFactory objectFactory)看看,这里的getObject是CreateBean的入口,一开始Bean的createBean都是在这里开始创建的

 其中创建前后的工作不在这里讲了,这一部分与单例循环依赖有关

这个getSingleton(String BeanName, ObjectFactory objectFactory)方法结束后,就是上一张图的内容,只剩下之前我说的getObjectForBeanInstance()

接下来就是原型Bean的创建

 准备工作预计还是跟循环依赖有关(个人估计是当两个原型Bean, b1和b2,b1创建依赖b2,然后去创建b2,然后b2,又依赖b1,而原型的性质是,每次需要时,都会new一个对象出来,以此反复,无限循环下去,这或许就是这方法缓存没有之后一开始就要检查原型Bean是否重复依赖的原因)

之后就是其他作用域Bean的创建

就不看了

四:

最后就是

看这个bean与所需要的类型对不对的上,对上就返回

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值