基于https://blog.csdn.net/qq32933432/article/details/95204514
总结步骤如下:
1.doGetBean
- 读缓存,缓存中是否已经有被创建过的单态类型的Bean,若有,获取Bean实例对象
- 如果缓存中没有取得单例模式的Bean,判断是否是正在创建原型bean,若是,抛异常
- 检查是否能在当前的BeanFactory中获取到所需要的BeanDefinition,如果不能则委托当前容器的父级容器去查找,如果还是找不到则沿着容器的继承体系向父级容器查找
- 获取父级的Bean定义合并公共属性
- 递归获取当前Bean所有依赖Bean的名称
- 根据类型创建bean,进入createBean()方法
2.createBean
- 进行校验
- 进入doCreateBean()
3.doCreateBean
- 创建包装类,封装被创建的Bean对象
- 调用PostProcessor后置处理(这里感觉有点像aop的前置后置增强)
- 向容器中缓存单例模式的Bean对象,以防循环引用
- Bean对象的初始化,依赖注入在此触发
- 检测该bean依赖的bean是否都已经初始化好了
- 注册完成依赖注入的Bean