Spring bean的加载过程

本文详细解析了Spring框架中Bean的加载过程,包括beanName转换、缓存中加载单例bean、实例化bean、循环依赖检查、检测parentBeanFactory、转换RootBeanDefintion、依赖查找、根据scope创建bean及类型转换等九个关键步骤。

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

  对于加载bean的功能,Spring的调用方式是 MyBean bean = bf.getBean("myBean");而我们从这一方法进入寻找bean的加载过程。发现过程如下图所示,共9个步骤

1.转换beanName:传入的参数beanName可能是别名、FactoryBean。FactoryBean解析去掉修饰符,也就是如果是name="&aa",会解析为name="aa";

2.尝试从缓存中加载单例bean:单例在Spring的同一个容器只会创建一次,后续加载从缓存中获取;因为在创建单例bean的时候可能存在依赖注入,而Spring为了避免循环依赖,创建bean的原则是不等bean创建完成,就会将创建bean的beanFactory提前曝光在缓存中,一旦下一个bean需要依赖上一个bean的时候,就直接使用beanFactory。

3.实例化bean:如果从缓存中获取到bean的原始状态,则需要对bean实例化。

4.循环依赖检查:检查当前bean是否存在循环依赖,即bean A 引用bean B,而bean B又引用bean A,则抛出异常

5.检测parentBeanFactory:如果parentBeanFactory不为空,且当前获取不到bean的配置信息,则会从parentBeanFactory中递归寻找。

6.将存储xml配置信息的gernericBeanDefinition转换为RootBeanDefintion:因为所有bean的后续处理都是针对RootBeanDefintion,所以这里需要转换,如果存在parentBean,则将parentBean的配置信息也合并到bean中。

7.寻找依赖:在初始化某一个bean的时候首先会初始化这个bean所对应的依赖。

8.根据不同的scope创建bean:scope包括singleton、request、prototype。默认singleton。

9.类型转换:根据输入的参数转换bean类型。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值