Java 9模块化开发 核心原则与实践
作者: (荷)桑德 马克 (Sander Mak)等著 王净等译
出版时间: 2018年版
内容简介
Java9向Java平台引入了模块系统,这是一个非常重要的飞跃,标志着模块化Java软件开发的新纪元。当需要创建灵活且易于维护的代码时,模块化是一个关键的架构设计原则。本书给出了Java模块系统的明确概述,并演示了如何通过创建模块化应用程序来帮助管理以及降低复杂性。作者引导我们了解了模块系统中的相关概念以及工具,介绍了将现有代码迁移到模块中的模式以及以模块方式构建新应用程序的方法。
目录
前言1
第一部分 Java模块系统介绍
第1章 模块化概述8
1.1 什么是模块化9
1.2 在Java 9之前10
1.2.1 将JAR作为模块?11
1.2.2 类路径地狱13
1.3 Java 9模块14
第2章 模块和模块化JDK18
2.1 模块化JDK19
2.2 模块描述符22
2.3 可读性23
2.4 可访问性24
2.5 隐式可读性25
2.6 限制导出29
2.7 模块解析和模块路径29
2.8 在不使用模块的情况下使用模块化JDK31
第3章 使用模块33
3.1 第一个模块33
3.1.1 剖析模块33
3.1.2 命名模块35
3.1.3 编译36
3.1.4 打包37
3.1.5 运行模块37
3.1.6 模块路径39
3.1.7 链接模块40
3.2 任何模块都不是一座孤岛41
3.2.1 EasyText示例介绍41
3.2.2 两个模块43
3.3 使用平台模块46
3.3.1 找到正确的平台模块46
3.3.2 创建GUI模块47
3.4 封装的限制51
第4章 服务54
4.1 工厂模式54
4.2 用于实现隐藏的服务57
4.2.1 提供服务57
4.2.2 消费服务59
4.2.3 服务生命周期61
4.2.4 服务提供者方法62
4.3 工厂模式回顾64
4.4 默认服务实现65
4.5 服务实现的选择66
4.6 具有服务绑定的模块解析68
4.7 服务和链接70
第5章 模块化模式73
5.1 确定模块边界74
5.2 精益化模块76
5.3 API模块76
5.3.1 API模块中应该包含什么77
5.3.2 隐式可读性78
5.3.3 带有默认实现的API模块81
5.4 聚合器模块82
5.4.1 在模块上构建一个外观83
5.4.2 安全拆分模块84
5.5 避免循环依赖86
5.5.1 拆分包86
5.5.2 打破循环87
5.6 可选的依赖关系90
5.6.1 编译时依赖关系91
5.6.2 使用服务实现可选依赖关系95
5.7 版本化模块96
5.8 资源封装99
5.8.1 从模块加载资源100
5.8.2 跨模块加载资源101
5.8.3 使用ResourceBundle类102
第6章 高级模块化模式104
6.1 重温强封装性104
6.1.1 深度反射105
6.1.2 开放式模块和包106
6.1.3 依赖注入109
6.2 对模块的反射111
6.2.1 内省112
6.2.2 修改模块113
6.2.3 注释114
6.3 容器应用程序模式115
6.3.1 层和配置116
6.3.2 层中的类加载119
6.3.3 插件体系结构122
6.3.4 容器体系结构127
6.3.5 解析容器中的平台模块132
第二部分 迁移
第7章 没有模块的迁移134
7.1 类路径已经“死”了?135
7.2 库、强封装和JDK 9类路径135
7.3 编译和封装的API138
7.4 删除的类型141
7.5 使用JAXB和其他Java EE API142
7.6 jdk.unsupported模块145
7.7 其他更改146
第8章 迁移到模块148
8.1 迁移策略148
8.2 一个简单示例149
8.3 混合类路径和模块路径150
8.4 自动模块152
8.5 开放式包155
8.6 开放式模块157
8.7 破坏封装的VM参数158
8.8 自动模块和类路径158
8.9 使用jdeps161
8.10 动态加载代码164
8.11 拆分包166
第9章 迁移案例研究:Spring和Hibernate167
9.1 熟悉应用程序167
9.2 使用Java 9在类路径上运行172
9.3 设置模块173
9.4 使用自动模块174
9.5 Java平台依赖项和自动模块176
9.6 开放用于反射的包176
9.7 解决非法访问问题177
9.8 重构到多个模块178
第10章 库迁移180
10.1 模块化之前181
10.2 选择库模块名称181
10.3 创建模块描述符184
10.4 使用模块描述符更新库186
10.5 针对较旧的Java版本187
10.6 库模块依赖关系188
10.6.1 内部依赖关系188
10.6.2 外部依赖关系191
10.7 针对多个Java版本192
10.7.1 多版本JAR192
10.7.2 模块化多版本JAR195
第三部分 模块化开发工具
第11章 构建工具和IDE198
11.1 Apache Maven198
11.1.1 多模块项目200
11.1.2 使用Apache Maven创建EasyText示例200
11.1.3 使用Apache Maven运行模块化的应用程序204
11.2 Gradle205
11.3 IDE205
第12章 测试模块207
12.1 黑盒测试208
12.2 使用JUnit进行黑盒测试210
12.3 白盒测试212
12.4 测试工具216
第13章 使用自定义运行时映像进行缩减217
13.1 静态链接和动态链接218
13.2 使用jlink219
13.3 查找正确的服务提供者模块223
13.4 链接期间的模块解析223
13.5 基于类路径应用程序的jlink224
13.6 压缩大小225
13.7 提升性能227
13.8 跨目标运行时映像228
第14章 模块化的未来229
14.1 OSGi230
14.2 Java EE232
14.3 微服务232
14.4 下一步233