Java 平台模块系统 - 保护的重点是什么?

Bar*_*jeu 1 java-platform-module-system java-9

我读过 JPMS 的优点之一是更好的封装(除非明确打开,否则所有内容都受到限制)。

但我有一个问题:是什么阻止了程序员替换module-info.class第三方模块 JAR 并导出所有包,甚至制作open模块,因此所有内容都可以通过反射(包括private成员)访问。

JPMS 是否真的可以帮助隐藏内部代码,或者就像 Java 8 及更早版本一样:所有内容都可以通过反射 API 访问,甚至是private成员(从 Java 9 开始只需要额外的步骤来打开模块)?

Ste*_*ann 6

我认为这是公平地说,在这个意义上,保护安全/防篡改的代码不是JPMS的首要目标。

如果篡改仍然是可能的,那么能够检测给定的应用程序是否遵守规则(或者,规则已经放宽到什么程度)仍然具有很大的价值。

一个明显的动机是或多或少地温和地推动开发人员生成“好的、模块化的”代码。逐渐“更好”的代码仍然比“坏”代码“更好”。在某些情况下,需要采取额外措施将是抵制诱惑的理由。

一个不太明显的动机是在运行时支持高级模块化流分析,这将有利于JIT 可以安全执行的优化

许多年前,我创造了术语“渐进封装”来表示一种方法和技术,它强制执行“尽可能多的封装”,不仅如此,但重要的是,也不能超出您的承受能力(建立完美的封装是有代价的)。用于调整模块化的 JPMS 命令行选项集可以被视为一个工具集,用于精确声明您无法承受完美封装的异常(出于各种可能的原因之一)。伪造 jar 文件当然是可能的,但如果原始文件已签名,则也可以检测到。在这一切中,即使你不能做到“完美”,“诚实”也很有价值。

(引号中的所有术语显然都是观点问题)。