Spring Boot 启动流程可以概括为以下几个步骤,下面对每个步骤进行详细介绍:
- 加载启动类: Spring Boot 应用的启动入口是一个带有
@SpringBootApplication
注解的启动类。这个注解是一个组合注解,包含了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
三个注解,它们分别用于指定配置类、自动装配和组件扫描。 - 创建 Spring 应用上下文: 在加载启动类时,Spring Boot 会创建一个 Spring 应用上下文(Application Context)。应用上下文是 Spring 框架的核心容器,负责管理 Bean 的创建、依赖注入等操作。Spring Boot 的应用上下文是基于
AnnotationConfigApplicationContext
实现的,通过读取启动类以及相关配置类中的注解信息来构建应用上下文。 - 执行自动装配: Spring Boot 利用自动装配机制,根据约定和条件注解加载所需的配置和组件。在创建应用上下文后,Spring Boot 会扫描并加载类路径下的所有 Starter,然后根据 Starter 中定义的条件注解,自动装配相应的配置和组件。自动装配是 Spring Boot 实现快速开发的重要机制,能够极大地减少开发者的配置工作。
- 运行应用: 在完成自动装配后,Spring Boot 会根据应用上下文中的配置信息启动 Web 服务或其他类型的应用。例如,如果引入了
spring-boot-starter-web
Starter,Spring Boot 将创建一个嵌入式的 Tomcat 容器,并根据配置启动一个 Web 服务。同时,Spring Boot 还会扫描并加载其他组件,如控制器、服务等,以便处理请求和业务逻辑。 - 执行生命周期回调: 在应用运行期间,Spring Boot 提供了一系列的生命周期回调方法,允许开发者在应用启动前或停止后执行特定的逻辑操作。通过实现
ApplicationRunner
或CommandLineRunner
接口,并将其注入到应用上下文中,开发者可以编写自己的生命周期回调方法。 - 应用关闭: 当应用需要关闭时,Spring Boot 会触发关闭事件,并执行相应的清理工作。例如,关闭数据库连接、释放资源等。同时,Spring Boot 也会调用实现了
DisposableBean
接口的destroy()
方法,以便进行额外的清理操作。
总结而言,Spring Boot 的启动流程包括加载启动类、创建应用上下文、执行自动装配、运行应用、执行生命周期回调和应用关闭。通过自动装配和约定优于配置的原则,Spring Boot 大大简化了项目的初始化和配置过程,提高了开发效率。开发者只需关注业务逻辑的实现,而无需过多关注底层框架的配置和管理。