Bean的加载

bean的加载过程是一个复杂的过程,doGetBean()源码很长,这里只是将重点加载步骤列举出来,方便以后复习,初次学习的小伙伴也可以按照这个步骤,细细品读源码.

Bean加载过程

1.转换对应beanName

传入的name可能是bean的name,也可能是FactoryBean

注:通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&。

 

2.尝试从缓存中加载单例

对于scope为singleton的bean,在一个容器中只会被创建一次,所以加载一个单例类首先在缓存中获取,如果缓存中没有在到singletonFactories中加载,如果bean中存在依赖注入,就有可能出现循环依赖.

避免循环依赖方法:不等bean加载完成,就将创建bean的ObjectFactory提早曝光加入到缓存中,一旦下一个bean创建时依赖上一个bean,就可以直接使用ObjectFactory

 

3.bean的实例化

从缓存中得到的bean是最原始的状态,而我们经常需要的是工厂bean中定义的bean-factory方法返回的bean,而getObjectForBeanInstance就是完成这个工作的

 

4.原型模式的依赖检查

当A还没创建完时,由于B的创建再次返回创建A,会造成循环依赖,所以当原型依赖检查结果为true时,抛出异常

 

5.检测parentBeanFactory

当前加载的xml配置文件中不包含beanName,就只能到parentBeanFactory中加载,但是如果parentBeanFactory为null,无论xml是否包含beanName,都不会到parentBeanFactory中加载

 

6.将存储XML配置文件的GernericBeanDefinition转换为RootBeanDefinition

XML中读取的Bean信息都是存储到GernericBeanDefinition中,但是后续Bean的处理都是在RootBeanDefinition中,所以这里需要做一个转换

 

7.寻找依赖

初始化某一个类时,会先初始化这个bean的依赖

 

8.针对不同的scope进行bean的创建

需要针对不同的scope对bean进行创建

 

9.类型转换

如果传入的参数requiredType与bean类型相同则不需要进行类型转换,如果不同,还需要对bean进行转换

 

好啦,以上就是主要的几点,如果想详细学习,建议读源码,读源码,读源码

 

转载于:https://www.cnblogs.com/Hangtutu/p/8982460.html

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值