1.首先会new一个SpringApplication然后在构造方法里初始化一些属性。
判断应用类型是响应式REACTIVE的还是Web应用SERVLET
去spring.factories文件加载初始化器ApplicationContextInitializer
去spring.factories文件加载监听器ApplicationListener
2.实例化之后执行run方法主体,run执行流程是基于观察者模式的,整个SpringBoot的启动流程就是各种事件的发布。
获取并启用监听器ApplicationListener,并发布应用启动事件SpringApplicationRunListener
3.准备环境变量,包含系统属性和用户配置的属性以及maven变量等,执行的代码块在 prepareEnvironment 方法内
4.创建应用程序的上下文createApplicationContext()
5.去spring.factories文件加载异常报告器SpringBootExceptionReporter
6.准备上下文环境prepareContext(这一步会执行初始化方法,其实就是执行实现了ApplicationContextInitializer 接口的类)
7.刷新上下文refreshContext,主要是自动装配和启动 tomcat
8.刷新上下文后置处理afterRefresh,空方法
9.发布上下文准备就绪事件
10.执行自定义的run方法。ApplicationRunner和CommandLineRunner