Java 9模块系统与模块化开发实践

Java 9模块系统与模块化开发实践

背景简介

Java 9引入了Java平台模块系统,旨在解决传统JAR包管理方式带来的问题。模块化开发不仅可以提高代码的封装性和安全性,还能优化应用程序的结构。本文基于《Java 9平台模块系统》章节内容,深入探讨了模块化开发的实践和自定义运行时的创建过程。

模块化开发的实践

文件结构的调整

为了支持模块化,我们重新组织了文件结构,将视频文件和FXML文件放置在模块的资源文件夹中。这种结构的调整有助于模块化工具更好地管理和维护代码。

• VideoPlayer.fxml 和 sts117.mp4 文件,这些文件位于模块目录的 res 文件夹中,便于应用程序执行时读取。
• 类 VideoPlayer 和 VideoPlayerController 放置在包 com.deitel.videoplayer 中,以满足模块化的要求。
• 在模块的根目录下创建了 module-info.java 文件,声明模块依赖关系。
自动模块的应用

在开发VideoPlayer时使用的ControlsFX库并非设计为Java模块,但通过将JAR文件添加到模块路径,我们可以隐式地将其作为一个自动模块来使用。

• JAR文件隐式成为自动模块,可以被模块声明的requires指令指定。
• 自动模块隐式导出所有包,使得其他模块可以访问其公共类型。
• 自动模块隐式读取应用中的所有其他模块,包括其他自动模块。
代码变更

为了模块化,对代码进行了以下更改:

• VideoPlayer.fxml 中的控制器类名修改为使用其完全限定名。
• VideoPlayer.java 中FXML文件名修改,并添加了包声明。
• VideoPlayerController.java 中视频文件名修改,并添加了包声明。

自定义运行时的创建

使用 jlink 工具

jlink是JDK 9中新增的一个工具,用于创建自定义运行时映像。你可以仅包含执行给定应用程序或一组应用程序所必需的模块。

• 使用 jlink 可以创建更小巧的运行时环境,适用于资源受限的设备。
• 例如,创建仅包含java.base模块的运行时,或者创建包含特定应用程序及其依赖项的运行时。
模块依赖图和解析器

模块解析器用于确定模块间的依赖关系,并确保所需模块在执行时可用。通过添加诊断选项,可以查看解析器的步骤。

• 通过添加 -Xdiag:resolver 选项,可以查看解析器定位模块的过程。
• 了解模块解析过程有助于解决模块依赖问题和配置自定义运行时。

服务和服务加载器

服务机制

服务是一种允许模块发布和消费API的方法,而不需要了解对方的具体实现。ServiceLoader类提供了一种动态加载服务实现的方式。

• 使用服务和ServiceLoader可以创建松耦合的对象,增强模块间的灵活性和可维护性。
• 服务机制在模块化开发中扮演着重要的角色,有助于模块间的解耦。

总结与启发

通过阅读和实践Java 9模块系统的相关内容,我们可以看到模块化对于Java应用程序开发的深远影响。模块化不仅让应用程序的结构更加清晰,还提升了代码的安全性和可维护性。同时,通过使用jlink工具创建自定义运行时,我们可以为特定环境优化Java应用程序。服务和ServiceLoader的概念在模块化开发中提供了额外的灵活性,使得模块间的交互更加高效。

本文的实践表明,尽管模块化开发可能需要一定的学习成本,但它为Java应用程序带来了长期的益处。对于开发者来说,掌握Java 9模块系统是未来进行高效、现代化Java开发的关键一步。

参考文献

  1. Java 9平台模块系统(章节内容)
  2. jlink - Java的链接器用于创建自定义运行时映像
  3. 服务和ServiceLoader在模块化开发中的应用

通过实践模块化开发和创建自定义运行时,我们能够更好地理解Java 9模块系统,为未来开发更为高效和安全的Java应用程序打下坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值