《Spring Boot 编程思想》所有的示例代码均存放在 GitHub 工程 https://github.com/mercyblitz/thinking-in-spring-boot-samples,该工程为标准的 Maven 多模块工程,运行时要求为 Java 1.8+
以及 Maven 3.2.5+
。其协议为 “Apache License Version 2.0“,不必担心商业用途所带来的风险。由于本书尚未完全截稿,工程结构未来可能存在微调。因此,当前内容无法确保百分之百匹配,请读者定期关注 README.md
文件,确保咨询的更新。
示例工程 thinking-in-spring-boot-samples
的结构如下图所示:
该工程包含五个子模块以及四个文件,分别是:
子模块 | 说明 |
---|---|
shared-libraries | 共享类库,为其他工程提供基础 API 或依赖 |
spring-boot-1.x-samples | Spring Boot 1.x 示例工程,包含六个子模块,主要用于参考和对比 Spring Boot 1.x 各版本中的实现差异,并且提供章节示例代码实现 |
spring-boot-2.0-samples | Spring Boot 2.0 示例工程,也是主示例工程,以 2.0.2.RELEASE 作为基础版本 |
spring-framework-samples | Spring Framework 示例工程,作为 Spring Boot 底层实现框架,版本范围从 2.0 到 5.0 |
traditional-samples | 传统 Java EE 示例工程,用于理解 Java EE 与 Spring Boot 关联和差异 |
文件 | 说明 |
---|---|
.gitignore | Git 版本控制忽略文件 |
LICENSE | 工程许可文件 |
README.md | 工程说明文件 |
pom.xml | 示例工程 Maven pom.xml 文件 |
其中,又以 spring-boot-2.0-samples 、spring-boot-1.x-samples 以及 spring-framework-samples 为本示例工程最核心的子模块,对此将详细说明。
spring-boot-2.0-samples 作为《Spring Boot 编程思想》的主示例工程,基于 Spring Boot 2.0.2.RELEASE
实现,由若干个子模块组成,这些模块与章节所讨论的议题紧密关联:
1
2
3
4
5
6
7
8
9
10
11
├── spring-boot-2.0-samples
│ ├── auto-configuration-sample
│ ├── externalized-configuration-sample
│ ├── first-app-by-gui
│ ├── first-spring-boot-application
│ ├── formatter-spring-boot-starter
│ ├── pom.xml
│ ├── production-ready-sample
│ ├── spring-application-sample
│ ├── spring-boot-2.0-samples.iml
│ └── traditional-web-sample
按照本书章节的安排,模块与章节所对应的关系依次为:
子模块 | 说明 | 篇章 |
---|---|---|
first-spring-boot-application | 基于 Maven 插件构建的第一个 Spring Boot 应用 | 《核心篇 - 总览Spring Boot》 |
first-app-by-gui | 基于图形化界面 https://start.spring.io/ 构建的第一个 Spring Boot 应用 | 《核心篇 - 总览Spring Boot》 |
auto-configuration-sample | Spring Boot 自动装配示例 | 《核心篇 - 走向自动装配》 |
formatter-spring-boot-starter | Spring Boot 自动装配 Starter 示例 | 《核心篇 - 走向自动装配》 |
spring-application-sample | Spring Boot SpringApplication 示例 |
《核心篇 - 理解 SpringApplication 》 |
externalized-configuration-sample | Spring Boot 外部化配置示例 | 《运维篇 - 超越外部化配置》 |
production-ready-sample | Spring Boot Production-Ready | 《运维篇 - 简化 Spring 应用运维体系》 |
traditional-web-sample | Spring Boot 应用部署到传统 Servlet 容器示例 | 《Web篇 - “渐行渐远“的 Servlet》 |
除此之外,相关示例代码部分也可能放置在其他子模块,如 “走向自动装配” 章节中,大量的实例代码在子模块 spring-framework-samples 之中。
前文提到,该子模块 包含六个子模块,它们对应了所有的 Spring Boot 1.x 实现版本:
1
2
3
4
5
6
7
8
├── spring-boot-1.x-samples
│ ├── pom.xml
│ ├── spring-boot-1.0.x-project
│ ├── spring-boot-1.1.x-project
│ ├── spring-boot-1.2.x-project
│ ├── spring-boot-1.3.x-project
│ ├── spring-boot-1.4.x-project
│ ├── spring-boot-1.5.x-project
由于截止到当前编写时间,恰逢 Spring Boot 1.5 的发行版本为 1.5.10.RELEASE
,而1.5 之前的版本则已停止维护,可选择其最后发行的版本作为参考,故子模块、Spring Boot 1.x 版本以及对应 Spring Framework 的关系,如下表格所示:
子模块 | Spring Boot 1.x 版本 | Spring Framework 版本 |
---|---|---|
spring-boot-1.0.x-project | 1.0.2.RELEASE |
4.0.3.RELEASE |
spring-boot-1.1.x-project | 1.1.9.RELEASE |
4.0.8.RELEASE |
spring-boot-1.2.x-project | 1.2.8.RELEASE |
4.1.9.RELEASE |
spring-boot-1.3.x-project | 1.3.8.RELEASE |
4.2.8.RELEASE |
spring-boot-1.4.x-project | 1.4.7.RELEASE |
4.3.9.RELEASE |
spring-boot-1.5.x-project | 1.5.10.RELEASE |
4.3.14.RELEASE |
值得注意的是,子模块 spring-boot-1.x-samples 并非主示例工程,各章节讨论的特性示例并非面面俱到。相反,读者应重点关注子模块 spring-boot-2.0-samples。
spring-framework-samples 作为例实现的辅助分析子模块,其版本涵盖 2.0 到 5.0,由于 spring-boot-1.x-samples 间接引入了 Spring Framework 4.0 到 4.3 的依赖,因此当前模块并未将 4.x 版本细分:
1
2
3
4
5
6
7
8
9
10
├── spring-framework-samples
│ ├── pom.xml
│ ├── spring-framework-2.0.x-sample
│ ├── spring-framework-2.5.6-sample
│ ├── spring-framework-3.0.x-sample
│ ├── spring-framework-3.1.x-sample
│ ├── spring-framework-3.2.x-sample
│ ├── spring-framework-4.3.x-sample
│ ├── spring-framework-5.0.x-sample
│ └── spring-webmvc-3.2.x-sample
原则上,以上模块所选择 Spring Framework 版本与 spring-boot-1.x-samples 类似,故子模块与 Spring Framework 依赖关系如下所示:
子模块 | Spring Framework 版本 |
---|---|
spring-framework-2.0.x-sample | 2.0.8 |
spring-framework-2.5.6-sample | 2.5.6.SEC03 |
spring-framework-3.0.x-sample | 3.0.0.RELEASE |
spring-framework-3.1.x-sample | 3.1.4.RELEASE |
spring-framework-3.2.x-sample | 3.2.18.RELEASE |
spring-framework-4.3.x-sample | 4.3.17.RELEASE |
spring-framework-5.0.x-sample | 5.0.6.RELEASE |
spring-webmvc-3.2.x-sample | 3.2.18.RELEASE |
当读者发现子模块工程为仅包含 pom.xml
文件时,说明它引入的目地在于 Spring Framework 源码分析,用于比对版本间 Spring 特性的变迁和实现的差异。了解了示例工程的结构后,下一节的内容将接入示例代码的说明。
由于本书几乎覆盖所有的 Spring Framework 以及 Spring Boot 版本,通常在配合章节说明时,绝大多数情况,示例代码的结尾部分带有 ”源码位置“的信息,且相对于 https://github.com/mercyblitz/thinking-in-spring-boot-samples 工程路径,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class GenericEventListenerBootstrap {
public static void main(String[] args) {
// 创建 注解驱动 Spring 应用上下文
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
// 注册 UserEventListener,即实现 ApplicationListener ,也包含 @EventListener 方法
context.register(UserEventListener.class);
// 初始化上下文
context.refresh();
// 构造泛型事件
GenericEvent<User> event = new GenericEvent(new User("小马哥"));
// 发送泛型事件
context.publishEvent(event);
// 发送 User 对象作为事件源
context.publishEvent(new User("mercyblitz"));
// 关闭上下文
context.close();
}
...
}
源码位置:以上示例代码,读者可查找 spring-framework-samples/spring-framework-5.0.x-sample 工程
如果以上信息尚未提供,默认情况,如书中的 Spring Framework 示例存放在 spring-framework-samples/spring-framework-5.0.x-sample 工程,而 Spring Boot 示例存放在 spring-boot-2.0-samples/ 所对应的章节工程。
书籍的讨论部分可能会引入相关的 UML 图,其源文件位于子项目工程的 src/main/resources/uml
目录中,文件扩展名为 .ucls
。如子模块 spring-application-sample:
1
2
3
4
5
6
src/main/resources/uml/
├── ApplicationContext.ucls
├── ApplicationContextEvent.ucls
├── ApplicationEventPublisher.ucls
├── ConfigurableApplicationContext_ApplicationEventPublisher.ucls
└── SimpleApplicationEventMulticaster.ucls
请读者使用 Eclipse 插件 “ObjectAid UML Explorer” 将其打开,插件下载地址:http://www.objectaid.com/update/current,如文件 ApplicationContext.ucls
: