Spring Boot 启动过程详解
Spring Boot 是一个用于快速开发独立的、生产级别的基于 Spring 框架的应用的工具。它简化了基于 Spring 的应用开发,特别是微服务的开发。下面是 Spring Boot 应用的启动过程的详细解析。
1. main
方法入口
一切从 main
方法开始。Spring Boot 应用的入口点是包含 main
方法的类,该类通常使用 @SpringBootApplication
注解标记。
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
2. SpringApplication.run()
SpringApplication.run()
是启动 Spring Boot 应用的核心。它执行了以下关键步骤:
2.1 创建 SpringApplication
对象
首先,它会创建一个新的 SpringApplication
实例。这个实例负责管理应用的启动。
2.2 推断应用的类型
Spring Boot 会推断应用是普通的 Spring 应用还是 Web 应用(Servlet 或 Reactive 类型)。
2.3 初始化 ApplicationContext
根据应用的类型,Spring Boot 会选择创建一个合适的 ApplicationContext
实例(例如 AnnotationConfigApplicationContext
或 AnnotationConfigServletWebServerApplicationContext
)。
2.4 准备环境
Spring Boot 会准备 Environment
,用于配置应用。这包括读取配置文件、系统属性、环境变量等。
2.5 应用初始化器
应用初始化器 ApplicationContextInitializer
会被调用,它们可以在 ApplicationContext
被刷新之前对其进行进一步的设置或处理。
2.6 执行监听器
各种事件监听器 ApplicationListener
会被触发,以响应不同的应用生命周期事件。
2.7 加载源
SpringApplication
会加载应用的主配置类(通常是使用 @SpringBootApplication
注解的类)。
2.8 刷新 ApplicationContext
ApplicationContext
会被刷新,这将导致 Spring 容器加载所有的单例 beans。
2.9 执行命令行运行器
如果有的话,CommandLineRunner
和 ApplicationRunner
beans 会被执行。
2.10 启动内嵌服务器
如果是 Web 应用,Spring Boot 会启动内嵌的服务器(比如 Tomcat、Jetty 或 Undertow)。
2.11 应用准备完成
最后,ApplicationReadyEvent
会被发布,表示应用已经准备好接受请求。
3. 应用运行
此时,Spring Boot 应用已经启动并且运行中。它会持续运行,直到被关闭或者遇到中断。
4. 应用关闭
当应用关闭时,ApplicationContext
会被关闭,这会导致 ContextClosedEvent
事件的发布。所有的标准清理步骤,如调用 DisposableBean
的 destroy
方法和关闭日志系统,都会在这个阶段执行。
以上就是 Spring Boot 应用的启动过程的详细解析。这个过程涉及了许多 Spring 框架的核心概念,如依赖注入、事件发布、环境抽象等。通过这个过程,Spring Boot 使得启动和运行基于 Spring 的应用变得更加简单和快速。