| 作者 |
| (荷)桑德·马克(Sander Mak) Paul Bakker |
| 丛书名 |
| O′Reilly 精品图书系列 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787111601296 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 Java9向Java平台引入了模块系统,这是一个非常重要的飞跃,标志着模块化Java软件开发的新纪元。当需要创建灵活且易于维护的代码时,模块化是一个关键的架构设计原则。本书给出了Java模块系统的明确概述,并演示了如何通过创建模块化应用程序来帮助管理以及降低复杂性。作者引导我们了解了模块系统中的相关概念以及工具,介绍了将现有代码迁移到模块中的模式以及以模块方式构建新应用程序的方法。 |
| 目录 |
| 前言 第一部分 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章 模块和模块化JDK 18 2.1 模块化JDK 19 2.2 模块描述符 22 2.3 可读性 23 2.4 可访问性 24 2.5 隐式可读性 25 2.6 限制导出 29 2.7 模块解析和模块路径 29 2.8 在不使用模块的情况下使用模块化JDK 31 第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 编译和封装的API 138 7.4 删除的类型 141 7.5 使用JAXB和其他Java EE API 142 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 使用jdeps 161 8.10 动态加载代码 164 8.11 拆分包 166 第9章 迁移案例研究:Spring和Hibernate 167 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 多版本JAR 192 10.7.2 模块化多版本JAR 195 第三部分 模块化开发工具 第11章 构建工具和IDE 198 11.1 Apache Maven 198 11.1.1 多模块项目 200 11.1.2 使用Apache Maven创建EasyText示例 200 11.1.3 使用Apache Maven运行模块化的应用程序 204 11.2 Gradle 205 11.3 IDE 205 第12章 测试模块 207 12.1 黑盒测试 208 12.2 使用JUnit进行黑盒测试 210 12.3 白盒测试 212 12.4 测试工具 216 第13章 使用自定义运行时映像进行缩减 217 13.1 静态链接和动态链接 218 13.2 使用jlink 219 13.3 查找正确的服务提供者模块 223 13.4 链接期间的模块解析 223 13.5 基于类路径应用程序的jlink 224 13.6 压缩大小 225 13.7 提升性能 227 13.8 跨目标运行时映像 228 第14章 模块化的未来 229 14.1 OSGi 230 14.2 Java EE 232 14.3 微服务 232 14.4 下一步 233 |