Java9模块是Java结构中最大的变化之一。这篇文章将对“Java9模块系统”做一个简要的介绍。
介绍
甲骨文公司将Java9的发布时间从2017年3月推迟到2017年9月。
正如我们所知,Java8带来了三大新特性(再加上一些增强和新特性)。
- Lambda表达式
- Stream API
- 日期API
同样,Java9也带来了三大特性(再加上一些增强和新特性):
- Java模块系统(Jigsaw项目)
- Java REPL
- Milling Project Coin项目
在本文中,我们将讨论Oracle Jigsaw项目基础知识。
Java9 Jigsaw项目
Jigsaw项目将引入Java9的全新概念:Java模块系统。
这是Oracle公司在javase9发行版中的一个非常大和著名的项目。最初,他们将此项目作为Java7发行版的一部分启动。然而,随着巨大的变化,它被推迟到Java8,然后再次推迟。现在它将于2017年9月与Java9一起发布。
Jigsaw项目的主要目标:
1. 模块化JDK
众所周知,目前的JDK系统太大了。因此,他们决定将JDK本身分成几个小模块,以获得一些好处(我们将在接下来的部分中讨论它们)。
2. 模块化源代码
当前的源代码jar文件太大,尤其是rt.jar太大了,对吧。所以他们将把Java源代码分成更小的模块。
3. 模块化运行时映像
这个特性的主要目标是“重新构造JDK和JRE运行时映像以容纳模块”。
4. 封装大多数内部API
该特性的主要目标是“使JDK的大多数内部API在默认情况下不可访问,但保留一些关键的、广泛使用的内部API可访问”。
5. Java平台模块系统
这个特性的主要目标是“允许用户创建他们的模块来开发他们的应用程序”。
6. jlink:Java链接器
这个jlink工具的主要目标是“允许用户创建应用程序的可执行文件”。
如果你不明白这些事情,不要担心。我们将在接下来的章节和我即将发表的文章中用一些有用的例子深入讨论这些概念。
当前Java系统存在的问题?
在本节中,我们将讨论“为什么我们需要Java9模块系统”,即当前Java系统存在的问题。
Java8或更早的系统在开发或交付基于Java的应用程序时存在以下问题:
- 由于JDK太大,要缩小到小型设备有点困难。Java8引入了3种类型的压缩配置文件来解决这个问题:compact1、compact2和compact3。但这并不能解决这个问题。
- JAR文件rt.jar太大,无法在小型设备和应用程序中使用。
- 由于JDK太大,我们的应用程序或设备无法支持更好的性能。
- 当前Java系统中没有强封装,因为“public”访问修饰符过于开放。每个人都可以访问它。
- 由于JDK、JRE太大,很难对应用程序进行测试和维护。
- 由于公众过于开放,他们不能避免访问一些内部非关键API,如sun.*、*.Internal.*等。
- 由于用户也可以访问内部api,安全性也是一个大问题。
- 应用程序太大。
- 要支持组件间较少的耦合有点困难。
为了解决这些问题,Oracle公司将在javase9版本中发布Java模块系统。
javase9模块系统的优点
JavaSE9模块系统将提供以下好处:
- 由于java9将把JDK、JRE、JAR等划分成更小的模块,所以我们可以使用我们想要的任何模块。因此很容易将Java应用程序缩小到小型设备。
- 易于测试和维护。
- 支持更好的性能。
- 因为public不仅仅是public,它支持非常强的封装。(别担心,这是个大概念。我们很快就会用一些有用的例子来探讨它)。
- 我们不能再访问内部非关键API了。
- 模块可以非常安全地隐藏不需要的和内部的细节,我们可以得到更好的安全性。
- 应用程序太小,因为我们只能使用任何我们想要的模块。
- 它很容易支持较少的组件之间的耦合。
- 它易于支持单一责任原则(SRP)。
我们将很快逐一探讨所有这些概念。
比较jdk8和jdk9
我们知道JDK软件包含什么。安装了jdk8软件后,我们可以在Java主文件夹中看到bin、jre、lib等几个目录。
然而,Oracle公司改变了这个文件夹结构,如下所示。
jdk8 文件夹结构:
jdk9 文件夹结构:
这里jdk9不包含JRE。在jdk9中,JRE被分离到一个单独的分发文件夹中。jdk9软件包含一个新文件夹“jmods”。它包含一组Java9模块,如下所示。
在jdk9中,没有rt.jar而且没有tool.jar
注:
到今天为止,“jmods”包含95个模块。它可能会在最终版本中增加。
“jmods”文件夹位于${JAVA_HOME}/jmods
。这些被称为JDK模块。
什么是Java9模块?
模块是代码、数据和一些资源的自描述集合。它是一组与代码、数据和资源相关的包、类型(类、抽象类、接口等)。
每个模块只包含一组相关的代码和数据,以支持单一责任(功能)原则(SRP)。
在接下来的文章中,我们将讨论“什么是模块描述符”和“如何开发Java模块”。
java9模块系统之母
到目前为止,java9模块系统已经有95个模块在早期访问JDK。Oracle公司已经将jdkjar和javase规范分为两组模块。
- 所有JDK模块都以“jdk.*”开头
- 所有JavaSE规范模块都以“java.*”开头
Java 9模块系统有一个java.base模块。它被称为基本模块。它是一个独立的模块,不依赖于任何其他模块。默认情况下,依赖于此模块的所有其他模块。
这就是为什么java.base
文件模块也被称为Java9模块之母。
它是所有JDK模块和用户定义模块的默认模块。
比较Java8和Java9应用程序
我们已经使用Java5、6、7或8开发了许多Java应用程序。我们知道Java8或更早版本的应用程序是什么样子的,它包含什么。
简而言之,我在下图中描述了一个Java8应用程序:
在Java8或更早版本的应用程序中,顶级组件是一个包。它将与类型相关的集合分组到一个组中。它还包含一组资源。
Java9应用程序与此没有太大区别。它刚刚引入了一个名为“Module”的新组件,用于将一组相关的包分组到一个组中。还有一个新的组件是模块描述符(“module-info.java”)就这样。
应用程序的其余部分与应用程序的早期版本相同,如下所示。
与Java8应用程序将包作为顶级组件一样,Java9应用程序也将模块作为顶级组件。
注:
每个Java9模块只有一个模块和一个模块描述符。与Java8包不同,我们不能在单个模块中创建多个模块。
简而言之,我可以说Java9模块包含以下主要组件:
- 一个模块
- 模块名称
- 模块描述符
- 成套设备
- 类型和资源集
这里的资源可能是module-info.java(模块描述符)或任何其他属性或XML。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1394.html
暂无评论