当前位置: 首页 > backend >正文

Spring Boot 主模块 spring-boot 核心技术解析:从启动类到内嵌容器的无缝支持

在现代企业级应用的开发中,构建高效、简洁的应用框架是至关重要的。Spring Boot 作为 Spring 生态系统的重要一员,凭借其“约定优于配置”的理念,极大简化了传统 Spring 应用的开发过程。通过内嵌的容器支持、自动配置功能以及灵活的外部化配置,Spring Boot 不仅降低了开发门槛,还大大提高了开发效率。

本篇文章将详细解析 Spring Boot 的核心模块——spring-boot 模块。通过对该模块的分析,我们将深入理解 Spring Boot 的工作原理,如何自动化配置以及如何通过它提供的便捷机制加速应用开发。


文章目录

      • 1、spring-boot 模块介绍
        • 1.1、spring-boot 概述
        • 1.2、spring-boot 模块依赖
        • 1.3、spring-boot 模块作用
      • 2、Spring Boot 应用的启动核心:SpringApplication 类
        • 2.1、创建 SpringApplication 实例
        • 2.2、准备环境
        • 2.3、打印 Banner
        • 2.4、创建并刷新 ApplicationContext
        • 2.5、启动内嵌 Servlet 容器
        • 2.6、回调执行器
        • 2.7、发布应用启动事件
      • 3、对内嵌 Web 容器的支持
      • 4、 提供了一流的配置外部化支持(Externalized Configuration)
      • 5、提供了方便的容器上下文初始化器、默认日志支持
      • X、后记


1、spring-boot 模块介绍

1.1、spring-boot 概述

Spring Boot 是基于 Spring 框架的快速开发框架,它通过“约定优于配置”的理念,极大地简化了 Spring 应用的开发和部署。Spring Boot 的主模块是核心模块之一,主要负责自动配置、应用启动、依赖管理等功能。

Spring Boot 的主模块是 spring-boot,它提供了框架的核心功能。这个模块并不直接用于开发应用,而是为其他模块和应用提供支撑和工具。

Maven 坐标:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId>
</dependency>
1.2、spring-boot 模块依赖

spring-boot 模块本身在构建时依赖了两个 Spring Framework 的核心模块:spring-corespring-context

  <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency></dependencies>

Spring Boot 本身不是一个完全替代 Spring 的框架,而是基于 Spring 之上提供增强功能。

  • spring-core:Spring Framework 的基础模块,提供了大量核心工具类和功能,几乎所有 Spring 项目都依赖它。
  • spring-context:这是 Spring 的应用上下文模块,建立在 spring-core 上,提供 IoC 容器的完整实现。
1.3、spring-boot 模块作用

spring-boot 作为 Spring Boot 框架的主模块,也是支持其他模块的核心模块,主要功能如下:

  • 提供了一个启动 Spring 应用的主类 SpringApplication
  • 提供了内嵌容器(如 Tomcat、Jetty、Undertow 等)的支持机制;
  • 提供了一流的配置外部化支持;
  • 供了一个很方便的 Spring 容器上下文初始化器,包括对合理记录日志默认参数的支持。

2、Spring Boot 应用的启动核心:SpringApplication 类

SpringApplication 类,是 Spring Boot 应用的启动核心。SpringApplication.run(...) 是整个启动流程的起点,里面封装了大量自动化配置和容器初始化逻辑。

public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

SpringApplication.run(...) 背后做了很多事情,我们来拆解一下它都干了什么。

2.1、创建 SpringApplication 实例
SpringApplication app = new SpringApplication(MyApplication.class);
  • 判断项目类型(Servlet/WebFlux/非 Web)
  • 设置默认的 ApplicationContext 类型
  • 注册一堆 ApplicationContextInitializer
  • 注册一堆 ApplicationListener
  • 加载 spring.factories 中定义的自动配置类等
2.2、准备环境
ConfigurableEnvironment env = prepareEnvironment(listeners, args);
  • 加载系统环境变量、命令行参数
  • 加载配置文件(application.properties / .yml 等)
  • 应用 profile(如 dev、prod 等)
2.3、打印 Banner

默认会显示启动横幅(可以关掉),就是那串大字母 Spring Boot

2.4、创建并刷新 ApplicationContext
context = createApplicationContext();
context.refresh();
  • 创建容器(如 AnnotationConfigServletWebServerApplicationContext
  • 扫描 @ComponentScan、注册配置类
  • 触发 @Bean@Configuration@Component 等注解的处理
  • 加载并实例化所有 Spring Bean
2.5、启动内嵌 Servlet 容器
  • 如果是 Web 应用,则会创建并启动内嵌 Tomcat/Jetty/Undertow
  • 注册 DispatcherServlet 等核心组件
2.6、回调执行器
ApplicationRunner / CommandLineRunner
  • 启动完成后,自动调用实现了这些接口的 Bean
  • 常用于启动后执行初始化逻辑
2.7、发布应用启动事件

包括:

  • ApplicationStartedEvent
  • ApplicationReadyEvent
  • ContextRefreshedEvent

监听器可以响应这些事件,进行进一步操作(比如日志记录、健康检查等)

总的来说 SpringApplication.run() 就像一键启动器:它负责构建、配置、装配并运行你的整个 Spring Boot 应用,无需手动干预!


3、对内嵌 Web 容器的支持

虽然 Spring Boot 内嵌 Tomcat/Jetty/Undertow 本身的实现代码是在 spring-boot-starter-tomcat 等模块中,但核心的内嵌容器支持机制(例如抽象接口、启动流程等)是由 spring-boot 模块定义的。

它支持的方式:

  • 定义了统一的接口:WebServer(表示容器),ServletWebServerFactory(容器工厂)
  • 启动流程在 SpringApplication -> WebServerApplicationContext 中完成
  • 自动调用容器工厂的 .getWebServer() 方法创建并启动容器

举例:

TomcatServletWebServerFactory -> 返回 TomcatWebServer 实例
TomcatWebServer.start() -> 启动 Tomcat 实例

可以自由切换容器,因为它们都实现了同一个接口结构,Spring Boot 做到了统一抽象。


4、 提供了一流的配置外部化支持(Externalized Configuration)

Spring Boot 允许你用多种方式配置应用行为,而不是写死在代码中。

支持哪些方式:

  • application.properties / application.yml
  • 命令行参数(--server.port=8081
  • 环境变量(SERVER_PORT=8081
  • @Value("${xxx}") 注入配置
  • @ConfigurationProperties 批量绑定

底层由 ConfigFileApplicationListener + EnvironmentPostProcessor 实现。而这些类都是在 spring-boot 模块中实现的,自动处理配置文件、加载顺序、优先级等。


5、提供了方便的容器上下文初始化器、默认日志支持

Spring Boot 提供了很多默认的启动行为,让我们零配置也能跑起来。

包括:

  • 默认初始化器:ApplicationContextInitializer, Spring 上下文初始化的接口,用于在 Spring 容器被刷新之前进行一些额外的初始化配置。
  • 默认监听器:如日志系统初始化(LoggingApplicationListener),是 Spring Boot 自动配置的日志初始化监听器,它会自动处理应用启动时的日志系统配置。
  • Spring Boot 默认集成了 SLF4J 和 Logback 作为日志系统。这意味着,无论你写什么日志(比如用 Logger 记录的 debuginfowarnerror),它都会通过 SLF4J 传递给 Logback 来输出到控制台或日志文件。

你几乎不需要写 logback.xml 就能有一个默认、结构化的控制台日志输出。这也是在 spring-boot 模块中实现的。


X、后记

Spring Boot 的设计目标是让开发者能专注于业务逻辑的实现,而不必为框架的配置、部署和启动过程浪费时间。通过对 spring-boot 模块的深入剖析,我们可以看到它如何通过智能的自动配置、容器支持以及简化的开发体验,彻底改变了传统的开发方式。无论是企业应用还是微服务架构,Spring Boot 都能为开发团队提供一个强大且灵活的基础框架。

随着 Spring Boot 的持续发展,未来它将更加成熟,并融入更多创新的特性,继续推动现代应用开发的进步。

http://www.xdnf.cn/news/1081.html

相关文章:

  • dify工作流之text-2-e-sql,大模型写sql并执行
  • 深入理解 Spring @Configuration 注解
  • SpringBoot原生实现分布式MapReduce计算
  • Java高频面试之并发编程-05
  • 新能源汽车可视化大屏系统毕业设计
  • Node.js 模块导入的基本流程
  • 【Harmony】常用工具类封装
  • Jupyter Notebook 中切换/使用 conda 虚拟环境的方式(解决jupyter notebook 环境默认在base下面的问题)
  • Python爬虫从入门到实战详细版教程Char01:爬虫基础与核心技术
  • 【网络】代理服务器收尾及高级IO
  • vue项目中axios统一或单独控制接口请求时间
  • WPS Office安卓版云文档同步速度与PDF转换体验测评
  • 音视频小白系统入门课-3
  • 媒体发稿攻略,解锁新闻发稿成长新高度
  • 双指针-11.盛水最多的容器-力扣(LeetCode)
  • vue作业-周报管理系统
  • python 执行顺序
  • 程序员学商务英文之Terms of Payment Packing
  • 日志文件太大,如何分卷压缩便于传输
  • pwm驱动呼吸灯
  • 【NCCL】transport建立(一)
  • Express项目实战大事件后台 API 项目(五)——文章管理
  • java集合框架day1————集合体系介绍
  • 服务器监控软件推荐
  • Python Cookbook-6.7 有命名子项的元组
  • RAG vs 微调:大模型定制化技术选型全解析
  • 10、Context:跨维度传音术——React 19 状态共享
  • 【Java核心技术卷Ⅰ-第11版学习-第3章-Java的基本程序设计结构】
  • 每日一题(9) 垃圾箱分布
  • 基于SpinrgBoot+Vue的智慧农业管理平台-031