继续上文Spring Boot 启动流程分析
6.10 在所有注册的bean中查找listener beans,注册到消息广播器中.代码如下:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6.11 this.finishBeanFactoryInitialization(beanFactory); 初始化剩下的一些单例
6.12 finishRefresh,完成刷新
6.12.1 调用父类refresh方法
(1) 初始化LifecycleProcessor.
(2) 发布ContextRefreshedEvent 事件
- 如果有父容器的话,
- 否则直接进行发布
- 如果父容器是AbstractApplicationContext 实例化,向父容器发布事件
- 向LiveBeansView进行注册.
6.13 清除缓存
最后一步是调用afterRefresh,预留了空函数
7.listeners.started()
所有的监听器,开始监听ApplicationStarted事件
8.最后调用callRunners,首先汇总所有的Runners,包括ApplicationRunner和CommandLineRunner
循环每个Runner,调用run方法启动
9.listeners.running(),本质为容器context下发ApplicationReadyEvent
最后会重置一下cache