Java 9 模块化开发:核心原则与实践

内容简介

Java 9 向 Java 平台引入了模块系统,这是一个非常重要的飞跃,标志着模块化 Java 软件开发的新纪元。当需要创建灵活且易于维护的代码时,模块化是一个关键的架构设计原则。本书给出了 Java 模块系统的明确概述,并演示了如何通过创建模块化应用程序来帮助管理以及降低复杂性。

作者引导我们了解了模块系统中的相关概念以及工具,介绍了可以将现有代码迁移到模块中的模式并以模块的方式构建新的应用程序。

本书特色:

  • 了解 Java 平台自身如何实现模块化;
  • 学习模块化如何影响应用程序的设计、编译、打包以及开发;
  • 编写自己的模块;
  • 使用模式改进任意代码库的可维护性、灵活性以及重用性;
  • 学习如何使用服务来创建解耦模块;
  • 将现有代码迁移到模块,并学习如何使用并不是模块的现有库;
  • 创建优化的自定义运行时映像,从而改变装载模块化 Java 应用程序的方式。
作者简介

桑德 · 马克(Sander Mak),荷兰 Luminis 公司的一名研究员,开发了许多主要用于 JVM 上的模块化以及可扩展软件,但也会在需要的地方使用 TypeScript。他经常在各种会议上发言,并热衷于通过博客(http://branchandbound.net)和作为 Pluralsight 平台的讲师分享知识。

保罗 · 巴克(Paul Bakker) Netflix 公司的一名高级软件工程师,在其 Edge Developer Experience 团队主要从事工具的开发,以提高公司内部开发人员的工作效率。曾与他人合作编著了 Modular Cloud Apps with OSGi(由O''Reilly 出版公司出版)一书。Paul 经常在与模块化、容器技术相关主题的会议上发言。

本书内容
译者序

JDK 9是 Java 开发工具包的第9个主要版本,于2017年7月下旬发布,它带来了许多令人兴奋的新功能。Java 9定义了一套全新的模块系统。当代码库越来越大,创建盘根错节的“意大利面条式代码”的概率呈指数级增长,这时候就得面对两个基础问题。首先,很难真正地对代码进行封装,而系统对不同部分(也就是 JAR 文件)之间的依赖关系并没有明确的概念。每一个公共类都可以被类路径之下任何其他公共类所访问,这样就会导致无意中使用了并不想被公开访问的 API。其次,类路径本身也存在问题:你怎么知晓所有需要的 JAR 都已经有了,或者是不是会有重复的项呢?模块系统把这两个问题都解决了。

模块化的 JAR 文件都包含一个额外的模块描述符。在这个模块描述符中,对其他模块的依赖是通过 requires 来表示的。另外,exports 语句控制着哪些包是可以被其他模块访问的。所有不被导出的包默认都封装在模块里。

本书共分为三部分,第一部分包括6章。第1章主要介绍了什么是模块化以及 Java 9模块的主要特点。第2章学习了如何定义模块,以及使用哪些概念管理模块之间的交互。第3章在第2章的基础上通过构建自己的模块进一步学习相关模块概念。第4章讨论了可以解耦模块的服务。第5章和第6章探讨了模块化模式,以及如何以最大限度地提高可维护性和可扩展性的方式使用模块。

第二部分包括4章。第7章和第8章重点介绍了如何将现有的代码迁移到模块中。第9章通过迁移案例详细讨论了如何实现迁移。如果你是一名库的创建者或者维护者,那么第10章将对你有所帮助,其介绍了如何向库添加模块支持。

第三部分也包括4章,主要介绍了一些模块化开发工具。第11章学习了主要的 IDE 以及构建工具。第12章介绍了如何对模块进行测试。第13章和第14章主要介绍了自定义运行时映像以及对模块化未来的展望。

本书图文并茂、技术新、实用性强,以大量的实例对 Java 9模块系统做了详细的解释,是学习 Java 9的读者不可缺少的实用参考书籍。本书可作为 Java 编程人员的参考手册,适合计算机技术人员使用。此外,书中还提供了相关参考资料,如果在阅读过程中遇到不明白的方法或属性,可以参阅相关内容。

参与本书翻译的人有王净、田洪、范园芳、范桢、胡训强、晏峰、余佳隽、张洁、何远燕、任方燕。最终由王净负责统稿。在此,要感谢我们的家人,他们总是无怨无悔地支持我们的一切工作。

在翻译过程中,我们尽量保持原书的特色,并对书中出现的术语和难词难句进行了仔细推敲和研究。但毕竟有少量技术是译者在自己的研究领域中不曾遇到过的,所以疏漏和争议之处在所难免,望广大读者提出宝贵意见。

最后,希望广大读者能多花些时间细细品味这本凝聚作者和译者大量心血的书籍,为将来的职业生涯奠定良好的基础。

王净

2018年3月于广州

什么是 Java 中的模块化?对于一些人来说,模块化是一个开发原则,即对接口进行编程并隐藏实现的细节,这就是所谓的封装学派(school of encapsulation)。对于另外一些人来说,模块化是指依赖类加载器来提供动态执行环境,这就是所谓的隔离学派(school of isolation)。还有一些人认为模块化指的是工件、存储库以及相关工具,这就是所谓的配置学派(school of configuration)。虽然单独来看,这些观点都是正确的,但它们都太片面,感觉更像是一个不太清晰的“大故事”的几个片段。如果开发人员知道其部分代码仅供内部使用,那么他们为什么不能像隐藏类或字段一样容易地隐藏包呢?如果代码只能在依赖项存在的情况下编译和运行,那么这些依赖项为什么不能顺畅地从编译过程流向打包过程,再到安装过程,最后到执行过程呢?如果工具只有在提供了原始自描述工件时才能起作用,那么如何重用那些只是普通 JAR 文件的旧版本库呢?

Java 9将模块作为 Java 平台的高级功能,从而很自然地引入了模块化概念。模块是一组用于重用的包,这个简单的概念对代码开发、部署以及运行的方式产生了非常深刻的影响。一旦将包放置到模块中,Java 中用来促进和控制“重用”的长期存在的机制&

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值