使用JDK9提供的模块化系统,来定义自己的模块


自从JDK9开始,Java开始支持模块化,使开发者可以有选择的引入需要的模块。大多数Java开发者对“模块化”的认识应该还处于“只是知道有这么个东西”的阶段,更别说使用 模块了。其实在平常开发过程中,如果允许可以尝试一下,模块化系统是向后兼容的,在模块化的项目中是可以使用非模块化的类库的。

Java模块化系统的背景

本节,我们将了解下 Java 9 带给我们的新特性—— Java 平台模块化系统(JPMS, Java Platform Module System),项目代号为 Jigsaw。我们都知道 Java 自 1995 年发布以来已经在上亿的设备上运行过,无论是体积庞大的大型机服务器还是只有手掌大小的嵌入式设备都能看到 Java 的身影,而随着 Java 平台的不断演进,Java 代码库也越发的庞大和臃肿,这样就很难在资源非常有限的 IoT 设备和嵌入式设备上部署 Java 应用,因此对 Java 平台进行模块化也越发的成为 Java 未来发展的首要任务之一。下面我们先看一下它的诞生历程:

Java 平台模块化从提出到出现在我们面前,可谓命途多舛,早在 2005 年 Java 7 时代,就以 JSR 277: Java Module System 规范的形式提出了,号称要在 Java 8 中出现,给 Java 带来历史上可以与 Java 5 相媲美的一次重要里程碑式的更新,之后又被 JSR 376: Java Platform Module System 规范所取代,可是由于该项目进度缓慢,困难重重,导致了 Java 8 发布时间一拖再拖,最终等不起了只好先把 Jigsaw 功能又延期到 Java 9,先将 Java 8 发布出来供大家使用,虽然没有 Jigsaw 特性,但 Java 8 也是一款非常重量级的更新,它带来了 Lambda、Stream 和 改进的日期时间 API 等功能特性,让程序员享受到函数式和流式编程的乐趣。而到了后 Java 8 时代,眼看 Java 9 的发布截止日期马上就要到了,可是 Jigsaw 项目仍然被许多问题困扰,如设计上的问题,过多的 bug 还没解决,因此又延期了,最终 Java 平台首席架构师 Mark Reinhold 下了最后通牒,要求 Java 9 必须在 2017 年 9 月份发布,在还有半年就要发布前,Jigsaw 项目发布了一版 Public Review 版,但是遭到了IBM 和 Redhat 的反对,遭到反对的原因在于他们认为模块化破坏了现有系统的设计原则,会导致现有系统迁移到新的模块化系统上的开销会非常巨大(其实是为了各自的利益所考虑的,这两家公司都有自己的中间件,而为了遵循统一的标准可能改动会比较大),具体信息请看这篇文章 Concerns Regarding Jigsaw。在与这两家经过协商和妥协后,Java 模块化系统终于在 2017 年 09 月 21 日发布了,模块化在经历了多重困难后终于与我们相见。下面我们将了解一些最基本的概念,实验环境:Java 9.0.1。

模块是什么

我们都知道在 Java 9 之前代码都是按包进行组织的,而模块则是在包的概念上又增加了一个更高层的抽象,它将多个逻辑上、功能上相关的包以及相关的资源文件,如 xml 文件等组织成一个可重用的逻辑单元,这个逻辑单元就称为模块。
通常情况下一个模块包含着一个模块描述符文件(module descriptor)用来指定模块的名字、依赖(需要注意的是每个模块必须显式得声明其依赖)、对外可使用的包(其余的包则对外不可见)、模块提供的服务、模块使用的服务以及允许哪些模块可以对其进行反射等配置信息。
模块最终都会打包成 jar 包来分发和使用的,那么模块打包的 jar 包和普通的 jar 包有什么区别呢?模块和普通的 jar 包几乎是一样的,只不过比普通的 jar 包在根目录下多了一个模块描述符文件—— module-info.class而已。

模块化的目标

根据 JSR 376 规范的描述,模块化系统要实现以下几个目标:

可靠的配置

模块应该提供一种机制用来显式声明模块间的依赖问题,而从系统可以寻着依赖路径来提取出所有模块的一个子集来支撑系统的运行。

强封装

模块化机制要求模块中的包只有在显式地导出后才可以被其他模块所使用,并且其他的模块必须显式地声明它需要这个模块的包后才能使用这些包,也就是说需要两个模块同时声明导出的包和使用的包时࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud-Future

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值