springboot详细启动过程

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

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 实例(例如 AnnotationConfigApplicationContextAnnotationConfigServletWebServerApplicationContext)。

2.4 准备环境

Spring Boot 会准备 Environment,用于配置应用。这包括读取配置文件、系统属性、环境变量等。

2.5 应用初始化器

应用初始化器 ApplicationContextInitializer 会被调用,它们可以在 ApplicationContext 被刷新之前对其进行进一步的设置或处理。

2.6 执行监听器

各种事件监听器 ApplicationListener 会被触发,以响应不同的应用生命周期事件。

2.7 加载源

SpringApplication 会加载应用的主配置类(通常是使用 @SpringBootApplication 注解的类)。

2.8 刷新 ApplicationContext

ApplicationContext 会被刷新,这将导致 Spring 容器加载所有的单例 beans。

2.9 执行命令行运行器

如果有的话,CommandLineRunnerApplicationRunner beans 会被执行。

2.10 启动内嵌服务器

如果是 Web 应用,Spring Boot 会启动内嵌的服务器(比如 Tomcat、Jetty 或 Undertow)。

2.11 应用准备完成

最后,ApplicationReadyEvent 会被发布,表示应用已经准备好接受请求。

3. 应用运行

此时,Spring Boot 应用已经启动并且运行中。它会持续运行,直到被关闭或者遇到中断。

4. 应用关闭

当应用关闭时,ApplicationContext 会被关闭,这会导致 ContextClosedEvent 事件的发布。所有的标准清理步骤,如调用 DisposableBeandestroy 方法和关闭日志系统,都会在这个阶段执行。


以上就是 Spring Boot 应用的启动过程的详细解析。这个过程涉及了许多 Spring 框架的核心概念,如依赖注入、事件发布、环境抽象等。通过这个过程,Spring Boot 使得启动和运行基于 Spring 的应用变得更加简单和快速。

最后更新于