0108 Spring Boot启动过程

Spring Boot 的启动过程可以分为以下几个关键步骤:

1. SpringApplication 初始化

Spring Boot 应用的启动是通过调用 SpringApplication.run() 方法完成的。在这个过程中,Spring Boot 会通过 SpringApplication 类对应用进行初始化,包括设置默认配置、准备环境、创建上下文等。

关键代码示例:

java 复制代码
SpringApplication.run(Application.class, args);

run() 方法中,SpringApplication 对象会进行一系列的初始化工作:

  • 推断应用类型 :根据项目是否包含 web 相关的依赖,Spring Boot 会自动推断应用是标准的 MVC 应用、Reactive Web 应用还是非 Web 应用。
  • 设置环境(Environment):Spring Boot 会根据操作系统、配置文件等信息,自动配置应用环境。
  • 加载 ApplicationContext :根据推断的应用类型加载相应的 ApplicationContext,比如 AnnotationConfigApplicationContextWebApplicationContext

2. 启动监听器和初始化器

SpringApplication 会在启动时触发 ApplicationListenerApplicationContextInitializer

  • ApplicationListener :在 SpringApplication 初始化的过程中,Spring Boot 会发布一系列事件(如环境准备、上下文准备、启动完成等),这些事件可以由 ApplicationListener 来监听和处理。
  • ApplicationContextInitializer :用于在 ApplicationContext 刷新之前对上下文进行自定义处理。

3. 准备环境

Spring Boot 使用 ConfigurableEnvironment 来抽象应用的环境。它包括了系统环境变量、Java 虚拟机参数、命令行参数等。

  • 加载外部配置文件(如 application.propertiesapplication.yml),并将其注入到 Spring 环境中。
  • 设置一些默认属性,比如端口号、编码格式等。

4. 创建并刷新 ApplicationContext

Spring Boot 根据应用类型创建相应的 ApplicationContext 实例,比如 AnnotationConfigServletWebServerApplicationContext(用于 Web 应用)。

  • Bean 加载 :Spring Boot 会扫描应用上下文中的 Bean,并根据注解(如 @Component@Service 等)或 XML 配置来实例化和装配这些 Bean。
  • 自动配置:Spring Boot 提供了大量的自动配置(Auto Configuration),在上下文刷新时自动完成配置,如数据库连接、MVC 配置等。
  • 容器刷新:Spring 会在这个阶段完成对应用上下文的刷新操作,并初始化所有单例 Bean。

5. 启动内嵌的 Web 容器

如果是 Web 应用,Spring Boot 会自动启动嵌入式的 Web 容器,比如 Tomcat、Jetty 或 Undertow。

  • Spring Boot 会创建并初始化 ServletWebServerApplicationContext,然后启动内嵌的服务器,并将 Spring 的 DispatcherServlet 注册到服务器中。
  • Web 容器启动完成后,应用将开始监听 HTTP 请求。

6. 执行 CommandLineRunnerApplicationRunner

ApplicationContext 刷新并且所有 Bean 都初始化完成后,Spring Boot 会调用实现了 CommandLineRunnerApplicationRunner 接口的 Bean,允许开发者在应用启动时执行一些自定义逻辑。

java 复制代码
@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application started with arguments: " + Arrays.toString(args));
    }
}

7. 应用启动完成

Spring Boot 在完成所有初始化和配置后,会触发 ApplicationStartedEvent,并正式进入运行状态,开始接受请求或执行任务。

8.总结

Spring Boot 启动过程包含多个步骤,从初始化 SpringApplication 到创建和配置应用上下文,再到启动嵌入式 Web 容器和执行自定义逻辑,整个过程高度自动化且灵活,通过各种机制(如事件、监听器、自动配置)为开发者提供了简化的启动和配置体验。

欢迎关注笔者最新文章:

相关推荐
冬天vs不冷12 分钟前
SpringBoot源码解析(五):准备应用环境
java·spring boot·后端
liuxin3344556618 分钟前
中小企业人事管理:SpringBoot技术深度解析
java·spring boot·后端
薯条不要番茄酱35 分钟前
【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
java·开发语言·后端·java-ee·学习方法
希忘auto2 小时前
详解Servlet的使用
java·servlet·tomcat
ygl61503733 小时前
Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统
java·spring boot·vue
Code哈哈笑3 小时前
【Java 学习】构造器、static静态变量、static静态方法、static构造器、
java·开发语言·学习
是老余3 小时前
Java三大特性:封装、继承、多态【详解】
java·开发语言
鸽鸽程序猿3 小时前
【JavaEE】Maven的介绍及配置
java·java-ee·maven
尘浮生3 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
程序员阿龙4 小时前
基于微信小程序的校园二手交易平台设计与实现,微信小程序(定制+讲解+咨询)校园二手商品在线交易系统、校园二手市场管理与推荐工具、智能化商品交易与推荐平台
spring boot·微信小程序·毕业设计·在线商品交易与搜索优化平台·在线二手商品交易与支付平台·商品管理与交易评价平台·二手商品分类与交易管理系统