阅读 Spring Boot 源代码之前,我们还需搭建基础阅读环境。Spring Boot 对 JDK 和构建工具有一定的要求, 比如 JDK 8+、Maven 3.3+、Gradle 5.x+等环境,满足相应需求即可。
为了达到更好的学习效果,建议大家使用实例+debug 的模式来进行学习。因此,源代码阅读 I 具最好支持实例的编写、运行、调试等功能。
本文使用 Itellj IDEA (简称 IDEA) 作为阅读代码工具,采用纯源代码阅读、实例+debug 两种模式配合进行学习。
其中纯源代码阅读模式可以帮助我们更好地进行代码的注释、编写、单元测试等操作,而实例+debug 模式可以让我们更好地理解整个项目的运行流程及功能的具体使用。图 1-2 和图1-3 展示 了通过 IDEA 阅读代码的两种模式。
我们知道,Spring 所拥有的强大功能之一就是可以集成各种开源软件。 但随着互联网的高速发展,各种框架层出不穷,这就对系统架构的灵活性、扩展性、可伸缩性、高可用性都提出了新的要求。随着项目的发展,Spring 慢慢地集成了更多的开源软件,引入大量配置文件,这会导致程序出错率高、运行效率低下的问题。为了解决这些状况,Spring Boot 应运而生。
Spring Boot 本身并不提供 Spring 的核心功能,而是作为 Spring 的脚手架框架,以达到快速构建项目、预置三方配置、开箱即用的目的。
设计理念
约定优于配置(Convention Over Configuration),又称为按约定编程,是一种软件设计范式,旨在减少软件开发人员需要做决定的数量,执行起来简单而又不失灵活。Spring Boot 的核心设计完美遵从了此范式。
Spring Boot 的功能从细节到整体都是基于“约定优于配置开发的,从基础框架的搭建、配置文件、中间件的集成、内置容器以及其生态中各种 Starters,无不遵从此设计范式。Starter
作为 Spring Boot 的核心功能之一,基于自动配置代码提供了自动配置模块及依赖,让软件集成变得简单、易用。与此同时,Spring Boot 也在鼓励各方软件组织创建自己的 Starter。
设计目标
说到 Spring Boot 的设计目标,值得一提的是 Spring Boot 的研发团队一 Pivotal 公司。Pivotal公司的企业目 标是致力于改变世界构造软件的方式(Weare transforming how the worldbuilds software)”。 Pivotal 公 司向企业客户提供云原生应用开发 PaaS 平台及服务,采用敏捷软件开发方法论帮助企业客户开发软件,从而提高软件开发人员工作效率、减少软件运维成本,实现企业数字化转型、IT 创新,帮助企业客户最终实现业务创新。
Spring Boot 框架的设计理念完美遵从了它所属企业的目标。Spring Boot 不是为已解决的问题提供新的解决方案,而是为平台和开发者带来一种全新的体验:整合成熟技术框架、屏蔽系统复杂性、简化已有技术的使用,从而降低软件的使用]槛,提升软件开发和运维的效率。
在 1.2 节中已经对 Spring Boot 的核心项目结构及功能做了相应的介绍,本节我们从架构层面 了 解 一 下 Spring Boot 的 不同模 块之间的依 赖 关 系 如 图 1-4 所示 。
图 1-4 中为了更清晰地表达 Spring Boot 各项目之间的关系,我们基于依赖的传递性,省略了部分依赖关系。比如,Spring Boot Starters 不仅依赖了 Spring Boot Autoconfigure 项目,还依赖了 Spring Boot 和 Spring,而 SpringBoot Autoconfigure 项目又依赖了 Spring Boot,Spring Boot 又依赖了 Spring 相关项目。因此在图中就省略了 Spring Boot Starters 和底层依赖的关联。
Spring Boot Parent 是 Spring Boot 及图中依赖 Spring Boot 项目的 Parent 项目,同样为了结构清晰,图中不显示相关关联。
从图 1-4 中我们可以清晰地看到 Spring Boot 几乎完全基于 Spring,同时提供了 Spring Boot和 Spring Boot Autoconfigure 两个核心的模块,而其他相关功能又都是基于这两个核心模块展开的。本文相关的源代码分析也是围绕两个核心模块展开。