Bean的生命周期(创建Bean的流程)
简单来说,Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction。
getBean方法是spring ioc的核心,阅读getBean方法的源码也是理解spring容器工作原理所必须要做的事情!
我们先来看一下getBean方法,getBean的具体实现逻辑在AbstractBeanFactory类里面的doGetBean方法中。
首先简略地介绍一下整体的执行流程:
1.根据传入beanName获取bean的别名
2.尝试从缓存中获取之前被实例化过了的单例bean
3.根据上面获取到的实例进一步获取bean(因为获取到的可能是一个工厂bean)
4.如果上面的步骤之后没有获取到bean那么就需要创建bean了
5.先根据缓存判断一下当前的bean是否正在被创建,如果是的话表示依赖循环了
6.尝试获取当前工厂的父工厂并从当前工厂的bean定义缓存中获取bean定义委托父工厂去生成
7.如果当前要获取的bean只是为了进行类型检查就标记bean已经被创建
8.同当前bean的父类合并bean的定义,并检查获取到的bean定义是不是抽象的
9.通过上面获取到的bean定义找到当前bean的依赖bean并递归调用getBean方法获取依赖bean
10.判断bean的scope是单例的还是原型的或者是其他的创建bean
11.根据要求返回的bean类型通过convertService来对bean进行转换
————————————————
版权声明:本文为CSDN博主「完美的工程学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dcx5173/article/details/118344056
- 参考
- https://blog.csdn.net/dcx5173/article/details/118344056?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-118344056-blog-120083309.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-118344056-blog-120083309.pc_relevant_aa&utm_relevant_index=2
- https://blog.csdn.net/zhang_qing_yun/article/details/120083309