简要记录一下跟踪spring boot启动的过程。
1,SpringBoot默认从SpringApplication.run启动。
2,调用new SpringApplication(primarySources).run(args);
3,执行如下动作:
- 搜索并读取spring.factory文件,组成LinkedMultiValueMap
- 获取ApplicationContextInitializer
- 获取ApplicationListener
大家可能觉得ApplicationContextInitializer更重要,其实启动的核心是ApplicationListener
4, 获取SpringApplicationRunListener,实际是EventPublishingRunListener。
EventPublishingRunListener的作用就是发送消息,有如下消息:
- ApplicationStartingEvent
- ApplicationEnvironmentPreparedEvent
- ApplicationPreparedEvent
- ContextRefreshedEvent
- ApplicationStartedEvent
- ApplicationReadyEvent
这些消息被ApplicationListener监听并处理。
5,第一轮消息:ApplicationStartingEvent
LoggingApplicationListener 初始化日志
DelegatingApplicationListener
6,第二轮消息:ApplicationEnvironmentPreparedEvent
-
BootstrapApplicationListener的onApplicationEvent读取bootstrap配置并创建一个SpringApplicatin,并创建ApplicationContext.并读取bootstrap文件.
-
ConfigFileApplicationListener
读取配置文件 -
DelegatingApplicationListener
BootStrap时处理列表为空 获取的环境的context.listener.classes参数的值
7,第三轮消息:ApplicationPreparedEvent
- ConfigFileApplicationListener
PropertySourceOrderingPostProcessor
- LoggingApplicationListener
注入springBootLoggingSystem Bean
- RestartListener
获取context并放入自己的变量
- DelegatingApplicationListener