1、Bean的创建流程图
2、Spring中Bean的创建入口
通过之前的 Spring源码 --> IOC初始化流程 可以发现在Spring中,Bean的创建入口在AbstractApplicationContext类中的refresh方法调用的finishBeanFactoryInitialization方法处
3、Bean的实际创建流程
进入上面初始化Bean的入口方法finishBeanFactoryInitialization
上图中标记的finishBeanFactoryInitialization方法中调用的的DefaultListableBeanFactory类中的preInstantiateSingletons方法则是初始化Bean的主要方法,进入该方法
上图可以看到,单例非工厂Bean所走的方法是直接调用了AbstractBeanFactory类的getBean方法
可以看到,Bean初始化的真正做事的方法就是上图中的doGetBean方法,进入doGetBean方法
由上面的几张图可知,在doGetBean方法中对于在BeanFactory初始化时加载的BeanDefinition进行了一一配对,在Bean配对了对应的BeanDefinition之后,对于该Bean中的依赖Bean的初始化保证(这里面涉及到了一个Bean的循环依赖问题,可见另外一篇文章),最后才是调用AbstractAutowireCapableBeanFactory类的createBean方法来进行该Bean的初始化
进入doCreateBean方法,该方法则是实例化Bean对象,并且对Bean对象进行属性填充的方法
至此,Bean的初始化完成。