对于 Spring Boot 应用来说,不管是直接运行调用了 SpringApplication#run(Class, String[]) 的 main 方法来启动 Spring Boot 应用,还是通过传统方式(参见 SpringBootServletInitializer 和 SpringServletContainerInitializer),将应该打包成 war 包放到 Web 容器中去运行,最终都会调用 SpringApplication#run(String...) 方法来启动应用、创建和刷新 ApplicationContext 。
下面先看 SpringApplication#run(String...) 方法: