类加载器中的Module
3.2.1 什么是Module
Java 9开始的新特性,并不是每个流行的Java框架必须采用,详细介绍文章英文|中文
3.2.2 ClassLoader与Module的关系
当平台及应用程序类加载器收到类加载请求,在委派给父加载器加载前,要先判断该类是否能够归属到某一个系统模块中,如果可以找到这样的归属关系,就要优先委派给负责那个模块的加载器完成加载 《深入理解Java虚拟机》
在Java 9开始,ClassLoader中加入Module类成员变量
// the unnamed module for this ClassLoader
private final Module unnamedModule;
默认如果没有专门写module-info.java文件,那么JVM编译器就会生成一个匿名模块用于强封装所有的类。
Module类用于描述模块
public final class Module implements AnnotatedElement {
...
// module name and loader, these fields are read by VM
private final String name;//模块名称
private final ClassLoader loader;//该模块属于哪个类加载器
// the module descriptor
private final ModuleDescriptor descriptor;//模块描述器,包含模块中的内容
假设一个module-info.java文件中包含如下信息
module my.module {
requires module.name;
exports com.my.package.name;
uses class.name;
provides MyInterface with MyInterfaceImpl;
opens com.my.package;
}
这里可以看出module描述的信息包括:requires, exports, uses, provides, opens
ModuleDescriptor类中包含的属性用于描述Module中的成员变量。下面用类图的方式描述
#### 3.2.3 类加载过程中Module的作用
在Java 9之后,类加载器加载时会首先判断是否属于某个module,如果属于,则调用module中的类加载器。


391



被折叠的 条评论
为什么被折叠?



