模块
-
Java 中的模块简介
了解模块系统的基础知识,如何创建和构建模块,以及如何提高可维护性和封装性。
-
使用开放模块和开放包进行反射访问
使用开放包和开放模块来允许对其他封装的包进行反射访问。
-
使用
requires static
实现可选依赖项
使用
requires static
实现可选依赖项 - 以这种方式需要的模块在编译时可访问,但在运行时可能不存在。 -
使用
requires transitive
实现隐式可读性
使用
requires transitive
实现隐式可读性,其中一个模块将对另一个模块的依赖传递下去,允许其他模块在没有显式依赖的情况下读取它。 -
限定的
exports
和opens
使用
exports ... to ...
和opens ... to ...
将导出或开放包的可访问性限制为特定模块。 -
使用服务解耦模块
使用 Java 的 ServiceLoader API 解耦服务的用户和提供者,该 API 使模块系统成为模块声明中
uses
和provides
指令的一流概念。 -
类路径上的代码 - 未命名模块
类路径上的所有 JAR 文件,无论是否模块化,都成为未命名模块的一部分。这使得“一切都是模块”,而类路径的混乱仍然存在。
-
使用自动模块进行增量模块化
模块路径上的普通 JAR 文件将成为自动模块,它们可以作为从模块化 JAR 文件到类路径的桥梁。
-
在命令行上构建模块
了解如何使用 javac、jar 和 java 命令手动编译、打包和启动模块化应用程序 - 即使构建工具完成了大部分繁重的工作,了解这些命令也很重要。
-
强封装(JDK 内部)
强封装是模块系统的一个基石。它避免(意外)使用内部 API,主要是
java.*
包中的非公共类型/成员以及大部分sun.*
和com.sun.*
。 -
使用
--add-exports
和--add-opens
绕过强封装
命令行标志
--add-exports
和--add-opens
通过在编译或运行时导出包或在运行时打开包以进行反射,来提供对内部 API 的访问,无论是 JDK 的一部分还是依赖项。 -
使用
--add-modules
和--add-reads
扩展模块图
命令行选项
--add-modules
和--add-reads
使用额外的模块(节点)和可读性关系(边)扩展模块系统生成的模块图。