请描述 Spring Boot 的启动流程,包括 SpringApplication 的初始化和 run 方法的核心步骤。

📅 2026/6/17 20:41:14
请描述 Spring Boot 的启动流程,包括 SpringApplication 的初始化和 run 方法的核心步骤。
Spring Boot 启动流程详解Spring Boot 是一个用于简化 Spring 应用程序开发的框架它提供了一种快速的方式来创建独立的、生产级别的 Spring 应用。它的启动流程相对复杂但可以总结为几个关键步骤。在这篇文章中我们将深入探讨 Spring Boot 的启动流程特别是SpringApplication的初始化和run方法的核心步骤。一、SpringApplication 类介绍SpringApplication是 Spring Boot 应用程序的核心类。它负责引导和启动应用程序并处理各种配置和设置。我们可以通过SpringApplication.run()方法来启动我们的 Spring Boot 应用。二、启动流程概述创建 SpringApplication 实例:通常在main方法中我们会创建SpringApplication的实例并调用run方法。准备环境:prepareEnvironment方法用于准备应用环境ConfigurableEnvironment。创建应用上下文:createApplicationContext方法用于创建 Spring 应用上下文。加载资源:load方法用于加载应用的配置和资源。注册生命周期监听器:registerListeners方法用于注册监听器。进行自动装配:通过refreshContext方法刷新应用上下文进行自动装配。运行 CommandLineRunner 和 ApplicationRunner:通过callRunners方法执行实现了CommandLineRunner和ApplicationRunner的实例。三、核心代码示例接下来我们通过 Java 代码来演示以上的过程。importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplicationapplicationnewSpringApplication(MyApplication.class);application.run(args);}}在main方法中我们创建了一个SpringApplication实例并调用run方法开始启动应用程序。下面我们将对run方法内部的关键步骤进行深入分析。publicConfigurableApplicationContextrun(String...args){// Step 1: 准备环境ApplicationContextInitializer?[]initializersgetInitializers();ConfigurableEnvironmentenvironmentprepareEnvironment(initializers);// Step 2: 创建 ApplicationContextConfigurableApplicationContextcontextcreateApplicationContext();context.setEnvironment(environment);// Step 3: 注册监听器registerListeners(context);// Step 4: 加载应用配置prepareContext(context,environment,initializers);// Step 5: 刷新上下文refreshContext(context);// Step 6: 执行命令行和应用运行器callRunners(context,args);returncontext;}四、详细流程步骤解析准备环境 (prepareEnvironment):该步骤会读取配置文件如application.yml,application.properties并初始化环境。protectedConfigurableEnvironmentprepareEnvironment(ApplicationContextInitializer?[]initializers){ConfigurableEnvironmentenvironmentnewStandardEnvironment();// 额外的环境配置逻辑returnenvironment;}创建应用上下文 (createApplicationContext):选择合适的上下文类型如AnnotationConfigApplicationContext或ServletWebApplicationContext并创建它。protectedConfigurableApplicationContextcreateApplicationContext(){returnnewAnnotationConfigApplicationContext();}注册监听器 (registerListeners):在应用上下文中注册所有的ApplicationListener。protectedvoidregisterListeners(ConfigurableApplicationContextcontext){// 注册自定义的 ApplicationListener}加载配置 (prepareContext):在这一阶段应用的主要配置文件被加载bean 的定义被解析并准备到上下文中。protectedvoidprepareContext(ConfigurableApplicationContextcontext,ConfigurableEnvironmentenvironment,ApplicationContextInitializer?[]initializers){// 加载 bean 定义等}刷新上文 (refreshContext):在应用上下文刷新过程中Spring 会加载所有的 bean 并执行相应的初始化。protectedvoidrefreshContext(ConfigurableApplicationContextcontext){context.refresh();}调用运行器 (callRunners):Spring Boot 会查找实现了CommandLineRunner和ApplicationRunner的 bean并调用它们的run方法。protectedvoidcallRunners(ConfigurableApplicationContextcontext,String[]args){for(CommandLineRunnerrunner:context.getBeansOfType(CommandLineRunner.class).values()){runner.run(args);}}五、最后总结下哈Spring Boot 的启动流程通过SpringApplication类极大地简化了 Spring 应用的初始化过程。上述的各个步骤为我们提供了清晰的框架结构使得开发者能够快速上手并构建出功能强大的应用程序。Spring Boot 封装了许多复杂的逻辑使得开发者可以更加专注于业务逻辑的开发而不必过多关注底层的配置细节。理解这些流程有助于我们在遇到问题时能够更有效地调试与排错。