spring源码学习(一)bean整体流程概述
bean的创建大体流程如下图(当然中间还省略的很多步骤)
1、bean是放在ioc容器中的,所有首先得有一个承载bean的容器beanFactory
2、有了容器之后,就可以开始解析bean的定义信息,解析bean的定义信息也是在obtainFreshBeanFactory这个方法中完成的
loadBeanDefinitions方法很复杂,重载方法非常多,后续仔细研究。
解析出来的beanDefinition会放在beanFactory的容器中
3、执行beanFactoryPostprocessor,在这里可以修改bean的定义信息,动态获取的bean定义信息也是在这里完成的
这里的${user.name}就是在beanFactoryPostProcessor里完成替换的
4、注册beanPostProcessor,未在图上体现出来。在bean的初始化环节执行的beanPostProcessor就是在这里完成注册的
5、初始化多播器注册监听事件,在单纯的spring中其实意义不大,主要是在springMVC以及springBoot中比较重要,后续学习到这一块再仔细研究
6、真正开始创建bean
1)、实例化非抽象的、单例的、非懒加载的bean
2)、实例化完成之后,还需要给bean填充属性
3)、属性填充完成之后,执行aware方法
4)、然后执行beanPostProcessor的before方法以及init-method和after方法。到此才算是一个完整的bean对象
先属性spring的一个大体流程,后续会一点一点的学习spring源码中的每一个细节