SpringBoot完整启动流程如下图所示。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM2IDMyMjN4YDN4M2MhZTNzYzX4ADM0IjM0IzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
(1).项目启动时,调用入口类SpringBootApplication(SpringBootApplication中的SpringBoot为项目名称)的main方法。
(2).入口类SpringBootApplication的main方法会调用SpringApplication的静态方法run。
(3).在run方法中首先创建一个SpringApplication对象实例,然后调用SpringApplication对象实例的run方法。
(4).查询和加载所有的SpringApplicationListener监听器。
(5).SpringApplicationListener监听器调用其starting方法。
(6).创建和准备SpringBoot应用将要使用的Environment环境,包括配置要使用的PropertySource以及Profile。
(7).创建和初始化应用上下文ApplicationContext。这一步只是准备工作,并未开始正式创建。
(8).SpringBoot通过@EnableAutoConfiguration获取所有配置以及其他形式的IOC容器配置,然后加载到已经准备完毕的ApplicationContext。
(9).调用ApplicationContextInitializer类的initialize方法对应用上下文进行设置和处理。
(10).调用ApplicationContext上下文的refresh方法,使IOC容器达到可用状态。