2.1.2_BeanFactory.getBean内部处理逻辑

本文详细解析了Spring框架中Bean的生命周期,从BeanFactory获取Bean的流程出发,介绍了getBean和createBean两个关键阶段的具体实现过程,包括依赖注入、Bean实例化、属性填充以及各种Aware接口的调用等。

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

在一个已经注册了BeanDefinitionBeanFactory中,通过getBean方法就可以获取到对应的Bean对象,但BeanFactory的内部处理逻辑还是非常复杂,主要的工作可以分为getBeancreateBean两部分,下面以DefaultListableBeanFactory为例来说明。

 

getBean阶段:

1、DefaultListableBeanFactory本身继承了DefaultSingletonBeanRegistry类,内部持有已经创建的Singleton的实例。查找已有的Singleton中是否有这个Bean,有的话则进行加工并返回。

2、如果BeanFactory本身不包含此Bean定义,但是有parent,则会委派给parent去处理。

3、如果BeanFactory有此Bean定义,就需要在BeanFactory内创建这个Bean。这时需要对BeanDefinition进行处理,获取DependentBean(通过getBean的递归使用),然后根据Bean类型(SingletonPrototypeScope)等来创建Bean

4、最后根据需要进行类型转换。

 

createBean阶段:

1、通过resolveBeanClass来加载所需要的Class

2、然后对Class进行一些InstantiationAwareBeanPostProcessor的处理。

3、接下来doCreateBean进行实际的Bean创建的工作,此时根据Bean定义使用Factory、自定义初始化函数或通用模式进行Bean创建。

4、通过populateBean进行初始化之后的预处理以及字段注入操作,注入模式包括byNamebyType,然后会对普通的property进行设置。

5、然后会对Bean进行一些Aware的绑定操作(BeanNameAware等),BeanPostProcess处理、afterPropertiesSetinvokeCustomInitMethodBean内部的个性化配置操作。

6、最后会做一点检查,包括Singleton的一致性、对DisposableBean的特殊处理等,这样就完成了Bean的创建工作。

 

转载于:https://www.cnblogs.com/jiaoqq/p/7171733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值