📅  最后修改于: 2023-12-03 15:31:28.364000             🧑  作者: Mango
Java 9 引入了一个新的模块系统,这是 Java 应用程序必须遵循的新方式。该模块系统具有几个目的,包括:
在 Java 9 中,模块定义一个代码库/库。模块具有以下部分:
模块声明是指定模块名称、此模块依赖项的模块(以及版本)以及此模块导出的包的部分。
模块声明位于 module-info.java
文件中,并且必须在源目录的根级别中。
以下是模块声明示例:
module com.example.mymodule {
requires com.example.myothermodule;
exports com.example.mypackage;
}
该声明指定名称为 com.example.mymodule 的模块需要 com.example.myothermodule,并且导出 com.example.mypackage。
导出声明指示在此模块中定义的任何公共API应导出给其他模块以使用。当其他模块需要在其代码中使用此模块中的导出部分时,必须在其模块声明中包含此模块。
这是导出声明示例:
module com.example.mymodule {
exports com.example.mypackage;
}
该声明指定将 com.example.mypackage 导出给其他模块。
打包声明指示在此模块中定义的所有代码的包。使用此声明时,如果代码库中的类文件不在同一目录中,则指定每个目录的名称。
以下是打包声明示例:
module com.example.mymodule {
opens com.example.mypackage;
}
该声明指定将 com.example.mypackage 打包到 com.example.mymodule。
使用声明指示在此模块中所需的服务,以及它们应该如何被发现。在此模块外,Java 9 还提供了 ServiceLoader 工具类来使用服务。
以下是使用声明示例:
module com.example.mymodule {
uses com.example.myservice.impl.ServiceImpl;
}
该声明使用 com.example.myservice.impl.ServiceImpl 服务。
开放声明指示其他模块可以反射此模块中的类。
以下是开放声明示例:
module com.example.mymodule {
opens com.example.mypackage;
}
该声明打开了 com.example.mypackage 中反射的类。
提供声明是一系列导出声明和使用声明。这两个声明是为了帮助您将服务的提供者映射到其消费者。
以下是提供声明示例:
module com.example.mymodule {
provides com.example.myservice.Service with com.example.myservice.impl.ServiceImpl;
}
该声明将 com.example.myservice.Service 映射到 com.example.myservice.impl.ServiceImpl。