IOC容器初始化流程
- AbstractApplicationContext.refresh()
- 准备BeanFactory(DefaultListableBeanFactory)
- 设置ClassLoader
- 设置Environment
- 扫描要放入容器的Bean,得到对应的BeanDefinition(只扫描,并不创建)
- 注册BeanPostProcessor
- 处理国际化
- 初始化事件多播器ApplicationEventMuiticaster
- 启动Tomcat
- 绑定事件监听器和事件多播器
- 实例化非懒加载的单例Bean
- 扫尾工作,比如清空实例化时占用的缓存等
IOC容器的初始化,核心工作是在AbstractApplicationContext.refresh方法中完成的
在refresh方法中主要做了几件事
- 准备BeanFactory,在这一块需要给BeanFactory设置很多属性,比如类加载器、Environment等
- 执行BeanFactory后置处理器,这一阶段扫描要放入容器的Bean信息,得到对应的BeanDefinition(只扫描,并不创建)
- 注册BeanPostProcessor,我们自定义的BeanPostProcessor就是在这个阶段被加载的,将来Bean对象实例化好后需要用到
- 启动tomcat,
- 实例化容器中实例化非懒加载的单例Bean,这里要说明的是,多例Bean和懒加载的Bean不会在这个阶段实例化。
- 容器创建完毕后,再做一些扫尾工作,比如清空实例化时占用的缓存等