1、启动类执行:
当 SpringBoot 项目启动时,会在当前工作目录下寻找有@SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点,在这个启动类中会包含一个 main() 方法。如果找不到这样的启动类,则会打印错误信息并退出。
2、SpringApplication 实例化:
在 main 方法中,创建一个 SpringApplication 对象。这个对象负责引导和启动 Spring Boot 应用。
3、设置应用程序参数:
SpringApplication 可以通过方法链设置一些参数,比如是否需要显示 banner,是否需要以 web 环境启动等。
4、运行 SpringApplication:
调用 SpringApplication.run() 方法启动应用程序。这个方法会触发一系列的启动步骤。
5、准备环境:
SpringApplication 准备 Environment,包括解析配置文件(如 application.properties 或 application.yml),设置系统属性和环境变量。
6、创建并刷新应用上下文:
根据应用类型(如 AnnotationConfigApplicationContext 或 AnnotationConfigServletWebServerApplicationContext)创建合适的 ApplicationContext。
注册所有的 Bean,包括自动配置的 Bean。
7、应用启动监听器和初始化器:
执行所有的 ApplicationListener 和 ApplicationContextInitializer。这些组件可以在应用启动过程中执行一些自定义逻辑。
8、自动配置:
Spring Boot 的自动配置机制根据类路径中的库和自定义的配置属性,自动配置 Spring 应用程序。
9、启动内嵌服务器:
如果是 web 应用,Spring Boot 会启动一个内嵌的 web 服务器(如 Tomcat、Jetty 或 Undertow)。
10、执行 CommandLineRunner 和 ApplicationRunner:
在应用启动完成后,Spring Boot 会调用所有实现了 CommandLineRunner 和 ApplicationRunner 接口的 Bean,以便在应用启动后执行一些特定的代码。
11、应用启动完成:
一旦所有的步骤都完成,Spring Boot 应用就会处于运行状态,准备好接受请求