Java 9中有哪些不同的模块类型?

1. Java 9模块化介绍

在Java 9中引入了一项新特性:模块化系统。它旨在减少Java应用程序构建和维护时的复杂性和不良的依赖关系,并提升应用程序的安全性和可靠性。在这个新模型中,应用程序是由一组互相依赖的模块组成的,每个模块都可以被视为一个严格定义的、封装的、可重用的单元。

Java 9中引入了三种不同的模块类型:自身定义的模块、非自身定义的模块和自动模块。下面我们将逐一介绍这些模块类型。

2. 自身定义的模块

自身定义的模块指的是那些使用了module-info.java文件的Java模块。这个文件包含了一些元数据,描述了模块的名称、依赖关系等信息。如果一个Java模块中包含了这个文件,那么这个模块就是一个自身定义的模块。

以下是一个简单的Java模块的例子:

module com.example.mymodule {

requires org.example.dependencymodule;

exports com.example.mypackage;

}

上面的代码定义了一个名为com.example.mymodule的模块,它依赖于org.example.dependencymodule模块,并导出了com.example.mypackage包的内容。

通过使用自身定义的模块,我们可以明确指定模块之间的依赖关系,从而使代码更加可靠和可维护。

3. 非自身定义的模块

非自身定义的模块是指那些没有module-info.java文件的Java模块。这种类型的模块通常由第三方提供,并且不知道它们到底有哪些依赖关系。

在Java 9中,我们可以使用--add-modules选项来为非自身定义的模块添加依赖关系。例如:

java --add-modules javafx.controls myapp.Main

上面的代码为一个名为myapp.Main的应用程序添加了对javafx.controls模块的依赖关系。

需要注意的是,尝试在非自身定义的模块中使用Java 9中新的模块化特性可能不是明智之举。因为这些模块没有模块信息,所以它们可能不是模块化的。

4. 自动模块

自动模块是指那些没有module-info.java文件的普通Jar文件。它们是为了协助我们将现有的Jar文件引入模块化系统中而产生的。系统会自动为这类Jar文件创建一些元数据,使得它们可以在模块化系统中被当作模块使用。

以下是一个自动模块的例子:

Automatic-Module-Name: com.example.mymodule

上面的代码指定了一个名为com.example.mymodule的自动模块。

如果你将一个没有module-info.java文件的Jar文件引入模块化系统中,系统会在运行时自动为这个Jar文件创建一个自动模块。如果这个Jar文件包含了META-INF/MANIFEST.MF文件,并且这个文件指定了一个Automatic-Module-Name属性,那么这个模块的名称就是这个属性的值。否则,系统将使用一个基于Jar文件名称的默认名称。

5. 总结

Java 9中引入了三种不同的模块类型:自身定义的模块、非自身定义的模块和自动模块。其中,自身定义的模块是我们最经常使用的,它可以明确指定模块之间的依赖关系,使得代码更加可靠和可维护;非自身定义的模块通常由第三方提供,我们可以使用--add-modules选项为它们添加依赖关系;自动模块是为了协助我们将现有的Jar文件引入模块化系统中而产生的,系统会自动为这类Jar文件创建一些元数据,使得它们可以在模块化系统中被当作模块使用。

模块化系统的引入使得Java应用程序构建和维护更加简单和可靠,它也提升了应用程序的安全性和可维护性。我们应当尽可能地使用自身定义的模块,避免使用非自身定义的模块和自动模块,从而使得我们的代码更加可靠和可维护。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签