概述
我们知道,在Java 9中,一个重要的改变就是模块化系统的引入,Java 9的模块化系统源于Jigsaw Project,我们首先看下Jigsaw Project的实现目标:
-
模块化JDK:我们知道,现有JDK已经非常庞大,Jigsaw Project的目标就是将JDK分隔成一个个的小模块。
-
模块化源码:当前源码jar文件也非常大,特别是rt.jar,Jigsaw Project也会考虑将源码切分成一个个的小模块。
-
重构JDK和JRE运行时映像以适应模块化的目的
-
封装绝大部分内部API,仅暴露几个重要的、使用频繁的内部API
-
实现Java平台的模块化系统,允许用户通过构建自己的模块来开发应用程序,
-
jlink, the Java Linker:jlink工具的主要目标是" Allowing the user to create executable to their applications "
当前Java系统的主要问题
-
JDK太过于庞大以至于很难缩减应用到小的设备中去,Java 8 中通过引入三种类型的压缩配置文件来解决这个问题:compact1, compact2, compact3,但事实上却无法解决。
-
Jar文件比如rt.jar太大无法用于较小的设备和应用中去
-
因为JDK太大,导致我们的应用或者设备无法提供更好的性能
-
当前Java系统中没有实现很好的封装效果,每个人都可以访问public修饰符修饰的对象
-
因为JDK和JRE太过庞大,对应用的测试和维护也相对较为困难
-
因为public修饰符太过开放,因此一些内部API比如:
sun.*, *.internal.*
也不可避免的暴露出来。 -
正因为用户可以访问内部接口,因此安全性也是一个不小的问题
-
应用过于庞大
-
很难支持组件之间的低耦合
Java 9 模块化系统的优势
- 因为Java 9 将JDK、JRE、JAR文件切分成了一个个的小模块,因此,我们可以根据实际需要任意使用我们需要的模块,并且可以很方便的通过剔除不必要的模块,将应用部署到小的设备中去。
- 易于测试和维护
- 可以支持更好的性能表现
- 兼具良好的开放与更好的封装特性
- 用户将无法访问一些主要用于内部的API接口
- 模块隐藏了内部细节,提供了很好的安全特性
- 应用将更加小巧,因为我们只需要部署用到的模块
- 支持组件间的低耦合
- 支持单一责任原则(SRP, Single Responsibility Principle )
Java 8 vs Java 9
Java 8 的文件夹结构
Java 9 的文件夹结构
Java 9中不再包含rt.jar 和tool.jar,取而代之的是一个个模块.jmod
Java 9中的模块定义
模块就是包含代码、数据与资源的自描述集合。
Mother of Java 9 Module System
Oracle将JDK jars 和 Java SE 规范分成了两个模块集:
- 所有的JDK模块均以
jdk.*
开头 - 所有的Java SE规范模块均以
“java.
开头
注意,这里面有一个java.base
模块,即我们所熟知的基础模块,它是一个完全独立的模块,并不依赖于其他任何模块。默认情况下,所有的模块均依赖于此模块,这也是java.base
被称为The Mother of Java 9 Modules
的原因,它是所有JDK模块和用户自定义模块的默认模块。
Java 8 和Java 9 应用程序对比
Java 8 应用程序通常如下:
Java 9 应用程序与前者相差不大,但引入了一个新的“模块”组件,以及一个模块描述符module-info.java
Java 8 的应用程序中,Packages
是顶层组件,Java 9应用程序中Module
是作为顶层组件。简单来讲,模块组成要素如下:
- One Module
- Module Name
- Module Descriptor
- Set of Packages
- Set of Types and Resources
原文链接
https://www.journaldev.com/13106/java-9-modules
最后
以上就是淡然金毛为你收集整理的Java 9 模块化系统简介的全部内容,希望文章能够帮你解决Java 9 模块化系统简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复