Java模块化系统 个人总结

一. Java模块化系统

JDK9开始引入,目的:为了能够实现模块化的关键目标:可配置的封装隔离机制。

可配置的封装隔离机制主要解决:

【1】首先要解决JDK9之前基于类路径(ClassPath)来查找依赖的可靠性问题;

【2】还解决了原来类路径上跨JAR文件的public类型的可访问性问题。

 

二. 模块的兼容性

2.1 模块的向后兼容性

为了使可配置的封装隔离机制能够兼容传统的类路径查找机制,JDK9提出了 类路径 和 模块路径 的概念;

某个类库到底是模块还是传统的JAR包,只取决于它存放在哪种路径上。

2.2 模块化系统将按照以下三种规则来保证使用传统类路径依赖的Java程序可以不经修改地直接运行在JDK9及以后的版本中:

【1】JAR文件在类路径的访问规则:

Java模块化系统 个人总结

 

【2】模块在模块路径的访问规则:

Java模块化系统 个人总结

【3】JAR文件在模块路径的访问规则:

Java模块化系统 个人总结

2.2 本身面临的模块间的管理和兼容性问题

Java模块化系统目前不支持在模块定义中加入版本号来管理和约束依赖,本身也不支持多版本号的概念和版本选择功能。

Java模块化系统 个人总结

模块的运行时部署、替换能力没有内置在Java模块化系统和Java虚拟机之中,仍然必须通过类加载器去实现。

 

三. 模块化下的类加载器

为了保证兼容性,JDK9并没有从根本上动摇从JDK1.2以来运行了二十年之久的三层类加载器架构以及双亲委派模型。

但是为了模块化系统的顺利施行,模块化下的类加载器仍发生了一些应该被注意到的变动:

【1】首先是扩展类加载器被平台类加载器取代。自然也就无须再保留 <JAVA_HOME>\lib\ext 目录。

【2】BuiltinClassLoader。

Java模块化系统 个人总结

JDK9之前的类加载器继承结构:

Java模块化系统 个人总结

JDK9及之后的类加载器的结构:

Java模块化系统 个人总结

JDK9及之后的类加载器委派关系:

Java模块化系统 个人总结

Java模块化系统 个人总结

在Java模块系统明确规定了三个类加载器负责各自加载的模块,即:上面所说的归属关系。