Spring Boot 项目介绍

引言

作为学习过 Java 的软件开发者,相信都知道 Spring 这一伟大的框架,它所拥有的强大功能之一就是可以集成各种开源软件。但随着互联网的高速发展,各种框架层出不穷,这就对系统架构的灵活性、扩展性、可伸缩性 和 高可用性都提出了新的要求。

随着项目的发展,Spring 慢慢地集成了更多的开源软件,引入大量配置文件,这会导致程序出错率高、运行效率低下的问题。为了解决这些状况,Spring Boot 应运而生。

Spring Boot 本身并不提供 Spring 的核心功能,而是作为 Spring 的脚手架框架,以达到快速构建项目、预置三方配置、开箱即用的目的。

项目介绍

1. 设计理念

约定优于配置(Convention Over Configuration),又称按约定编程,是一种软件设计范式,旨在减少软件开发人员需要做决定的数量,执行起来简单而又不失灵活。Spring Boot 的核心设计就完美遵从了此范式。

Spring Boot 的功能从细节到整体都是基于 ”约定优于配置“ 来开发的,从基础框架的搭建、配置文件、中间件的集成、内置容器以及其生态中的各种 Starters,无不遵从此设计范式。

Starter 作为 Spring Boot 的核心功能之一,基于自动配置代码提供了自动配置模块及依赖,让软件集成变得简单、易用。我们也可以创建自己的 Starter,来使我们的应用接入 Spring Boot。

2. 设计目标

说到 Spring Boot 的设计目标,就不得不提到它的研发团队–Pivotal 公司。该公司的企业目标是 “致力于改变世界构造软件的方式(We are transforming how the world builds software)”

Spring Boot 框架的设计理念完美遵从了它所属企业的目标。Spring Boot 不是为已解决的问题提供新的解决方案,而是为平台和开发者带来一种全新的体验:

整合成熟技术框架、屏蔽系统复杂性、简化已有技术的使用,从而降低软件的使用门槛,提升软件开发和运维的效率。

3. 源代码的目录结构

Spring Boot 源代码地址

知识点: Spring Boot 2.3.x 系列版本开始用 Gradle 构建 ,2.2.x 及之前 的系列版本都用 Maven 构建。

Spring Boot 项目的目录结构分为两部分,一部分是整个开源项目的目录结构,另一部分是细化到 jar 包级别的目录结构。

下面我们从整体到局部一起了解下 Spring Boot 项目的目录结构。

首先从整体出发,如下图所示是 Spring BootGitHub3.0.2 版本源代码顶层目录结构:

不同版本之间的 Spring Boot 源代码的顶层目录结构会有所变化,但并不影响其核心功能。

目录名 描述
spring-boot-project Spring Boot 核心项目代码,包含核心、工具、安全、文档、starters等项目。
spring-boot-system-tests Spring Boot 部署和镜像测试。
spring-boot-tests Spring Boot 集成和冒烟的测试。

关于顶层目录结构,简单了解即可,从 1.5.x3.0.x 版本,该层级的目录结构在不停地发生变化。

然后从局部出发,如下图所示是 spring-boot-projectGitHub3.0.2 版本源代码的目录结构:

spring-boot-project 目录是在 Spring Boot 2.0 版本发布后新增的目录层级,并将原来在 Spring Boot 1.5.x 版本中的一级模块作为 spring-boot-project 的子模块。该模块包含了 Spring Boot 所有的核心功能。

目录名 描述
spring-boot Spring Boot 核心代码,也是入口类 SpringApplication 类所在项目。
spring-boot-actuator 提供应用程序的监控、统计、管理及自定义等相关功能。
spring-boot-actuator-autoconfigure 针对 actuator 提供的自动配置功能。
spring-boot-autoconfigure Spring Boot 自动配置核心功能,默认集成了多种常用框架的自动配置类等。
spring-boot-cli 命令工具,提供快速搭建项目原型、启动服务、执行 Groovy 脚本等功能。3.0.x 版本开始被移除。
spring-boot-dependencies 依赖和插件的版本信息。
spring-boot-devtools 开发者工具,提供热部署、实时加载、禁用缓存等提升开发效率的功能。
spring-boot-docs 参考文档相关内容。
spring-boot-parent spring-boot-dependencies 的子模块,是其他项目的父模块。
spring-boot-properties-migrator Spring Boot 2.0 版本新增的模块,支持升级版本配置属性的迁移。3.0.x 版本开始被移除。
spring-boot-starters Spring Boot 以预定义的方式集成了其他应用的 starter 集合。
spring-boot-test 测试功能相关代码。
spring-boot-test-autoconfigure 测试功能自动配置相关代码。
spring-boot-tools Spring Boot 工具支持模块,包含 AntMavenGradle 等构建工具。

4. 整体架构

上面给大家介绍了 Spring Boot 的核心项目结构及功能,下面我们从架构层面了解一下 Spring Boot 的不同模块之间的依赖关系。

为了更清晰地表达 Spring Boot 各项目之间的关系,在下图中我们基于依赖的传递性,省略了部分依赖关系。

比如,Spring Boot Starters 不仅依赖了 Spring Boot Autoconfigure 项目,还依赖了 Spring BootSpring,而 Spring Boot Autoconfigure 项目又依赖了 Spring BootSpring Boot 又依赖了 Spring 相关项目。因而在下图中就省略了 Spring Boot Starters 和 底层依赖的关联。

同样,Spring Boot ParentSpring Boot 及图中依赖 Spring Boot 项目的 Parent 项目,为了结构清晰,图中不显示相关关联。

从上图中我们可以看出 Spring Boot 几乎完全基于 Spring,同时提供了 Spring BootSpring Boot Autoconfigure 两个核心的模块,而其他相关功能又都是基于这两个核心模块展开的。

总结

到目前为止,Spring Boot 的最新发布版为 3.0.2,该项目也在不断的更新和迭代中,上述介绍可能会有遗漏或差异,请至 官方 GitHub 查阅详情。

参考

Spring Boot 技术内幕-架构设计与实现原理》朱智胜