Spring源码学习04

本文围绕Spring的getBean方法展开。doGetBean先从缓存取单例bean,scope为prototype时不缓存。getSingleton方法在循环引用时会从earlySingletonObjects获取bean。scope为protoType的循环依赖会抛异常。getBean会递归创建依赖bean,还可能调用factoryBean.getObject(),之后可能进行post-process处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.FactoryBean的使用

2.doGetBean会先尝试从缓存中获取bean,scope为prototype时bean并不会缓存,所以缓存获得的对象均是单例的bean实例

 3.getSingleton方法不仅仅是从缓存的map-->singletonObjects获取bean的,他,通过条件判断如果当前doGetBean是属于循环引用的获取的情况下,会尝试从earlySingletonObjects中获取objectFactory,并调用obejctFactory.getObject获取earlyBean并放到earlySingletonObjects;与singletonObjects不同的是,bean在创建过程中就会将该bean放到map,用于检测循环引用

4. scope为protoType时的循环依赖,直接抛出异常

5.在getBean过程中会递归的调用getBean创建要创建的bean的依赖bean对象,depends-on配置的bean

6.getBean方法创建的bean可能不是真正需要的bean,而是factoryBean。所以在调用完创建bean的相关方法后,还有如下方法调用

 主要实现如下其实就是factoryBean.getObject()方法的调用。

7.上述的方法在实际调用factoryBean.getObject()成功,可能需要对创建的object进行post-process处理,这是个扩展点

由于bean已经初始化了,所以此处的调用是 BeanPostProcessor的postProcessAfterInitialization方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值