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