阅读代码前的准备
本章内容分为两部分,第一部分将带大家了解阅读 Spring Boot 源代码需要做的准备工作,包括如何获取源代码、源代码的项目结构、源代码阅读工具等内容。第二部分重点介绍 SpringBoot 的设计理念、设计目标以及整体框架。
本章默认读者有一定的 Java 编程能力, 并对 Spring Boot 有一定了解和基本的使用经验。
本文以写作时 Spring Boot 最新稳定版本 2.2.1 为基础进行讲解。该版本需在 Java 程序开发包 JDK 8.0 (及以上版本)和 Maven 3.3 环境下运行,读者需提前安装。
获取和调试 Spring Boot 源代码
获取 Spring Boot 的源代码
获取 Spring Boot 源代码有两种方式:直接获取整个项目源代码,创建 Maven 项目后间接加载源代码。我推荐使用第二种方式。
先介绍第一种方式。直接获取源代码方式比较简单,访问 GitHub 上的 Spring Boot 项目,通过 git clone 或直接下载 ZIP 压缩包方式,便可获取整个项目源代码。如果采用 git clone形式,注意下载完成后将代码切换至 tags 中的 2.2.1.RELEASE 版本。源代码地址:
htps://github.com/spring-projects/spring-boot。
压缩包下载完成后,可直接将项目导入 IDE,由 IDE 自动进行编译,也可在根目录下执行Maven 命令进行编译,代码如下。
代码语言:javascript复制mvn clean package -Dmaven. test. skip=true -Pfast
在执行上面命令时,-P 参数指定了快速编译,如果需要全量编译,则-P 参数值为 full。无论采用 git clone 还是 ZIP 压缩包形式下载,都会将整个项目的所有内容下载,使用 IDE编译或 maven 命令编译时会加载所有依赖 jar 包。如果选择此种方式获取源代码,耗时较长,请耐心等待。
第二种方式是创建 Spring Boot 的 Maven 项目后间接获取源代码,这样可以精准下载所需要项目的依赖及源代码。本书采用此种方式来获取源代码,以便更好地与实例相结合。该方式具体步骤如下。
步骤 1 创建一 个简单的 Spring Boot 项目。
步骤 2 通过 IDE 导入或打开项目。
步骤 3 pom.xml 文件中引 |入所需功能的 jar 包依赖。
步骤 4 通过 IDE 获取源代码和文档。(IDE 提供 下载源代码或下载文档功
能,并自动关联。)
调试 Spring Boot 的源代码
我们通常使用“实例 debug'方法对 Spring Boot 源代码进行调试与追踪。
Spring Boot 默认采用 main 方法启动,入口方法为 SpringApplication 类的 run 方法。创建项目后会默认生成类似以下入口类代码:
代码语言:javascript复制@SpringBootApplication
public class DemoApplication
public static void main(String[] args) {
SpringApplication. run(DemoApplication.class, args);
}
}
比如,需要学习 SpringApplication 类初始化功能时, 可进入该类内部,通过 IDE 下载相关源代码,然后在具体位置打上断点,通过 debug 模式启动程序。当程序运行到断点处时,便可查看上下文相关信息及处理流程。
读者在实践的过程中,涉及每个具体知识点的源代码查看时,可以先编写具体实例,再 debug 运行实例并通过断点来跟踪具体执行流程。
SpringBoot源代码的目录结构
Spring Boot 项目的目录结构分为两部分,一部分 是整个开源项目的目录结构,另-部分是细化到 jar 包级别的目录结构。下面我们一起从整体到局部了解 Spring Boo 项目的目录结构。
Spring Boot 的整体项目结构
图 1-1 所示是 Spring Boot 在 GitHub 上 2.2.1.RELEASE 版本源代码顶层目录结构。
不同版本之间的 Spring Boot 源代码的顶层目录结构会有所变化,但并不影响其核心功能。2.2.x.RELEASE 版本由以下子模块构成。
:spring-boot-project: Spring Boot 核心项目代码,包含核心、工具、安全、文档、starters等项目。
spring-boot-tests: Spring Boot 部暑及集成的测试。
关于顶层目录结构,我们有个简单了解即可,从 1.5.x 到 2. 1.x 再到 2.2.x 版本,该层级的目录结构在不停地发生变化。
spring-boot-project 项目结构
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 脚本等功能。
-spring-boot- dependencies:依赖和插件的版本信息。
-spring boot deutoos:开发者工具,提供热部署、实时加载、禁用缓存等提升开发效率的功能。
.spring-boot-docs:参考文档相关内容。
spring-boot-parent: spring-boot-dependencies 的子模块, 是其他项目的父模块。
-spring-boot properties-migrator: Spring Boot 2.0 版本新增的模块,支持升级版本配置属性的迁移。
-spring boot starters: Spring Boot 以预定义的方式集成了其他应用的 starter 集合。
:spring-boot-test:测试功能相关代码。
-spring-boot-test- autoconfigure:测试功能自动配置相关代码。
spring-boot-tools: Spring Boot 工具支持模块,包含 Ant、Maven、Gradle 等构建工具。
本文以 spring-boot 和 spring-boot-autoconfigure 模块为核心,同时会涉及 actuator、test.loader 等相关项目的源代码。
本文给大家讲解的内容是:获取和调试SpringBoot源代码、SpringBoot源代码的目录结构
- 下篇文章给大家讲解的是源代码阅读工具、SpringBoot的设计理念和目标、整体架构;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。