JDK 9:模块系统状态的重点

马克·雷因霍尔德 ( Mark Reinhold )的“模块系统状态 (SOMS)”已于本月初发布,它提供了信息丰富的可读性“对项目Jigsaw中原型的Java SE平台进行了增强的非正式概述,并被提议作为JSR 376的起点。” 在这篇文章中,我总结并突出了一些我在阅读文档时发现有趣的概念和术语。

  • 模块系统状态指出Java开发人员将定期使用文档中讨论的部分功能。 这些功能和概念是“模块声明,模块化JAR文件,模块图,模块路径和未命名模块”。
  • 模块是“一种基本的新型Java程序组件”,是“一个自命名的,自定义的代码和数据集合”。
  • “一个模块声明需要其他哪些模块才能进行编译和运行。”
    • requires关键字似乎类似于OSGI的要求,捆绑或进口包装
  • “一个模块声明了......其打包出口 ”到其他模块。
    • exports关键字似乎类似于OSGI的Export-Package 。
  • 模块声明是“ Java编程语言的新构造”,提供了“模块的自我描述”。
    • 惯例是将“模块声明的源代码”放在“模块源文件层次结构根目录中名为module-info.java的文件中”。
  • “模块名称,如程序包名称,不得冲突。”
  • “模块的声明不包括版本字符串,也不包含对其依赖的模块的版本字符串的约束。”
  • 模块化的JAR文件在所有可能的方式上都与普通的JAR文件类似,除了它的根目录中还包含module-info.class文件。”
  • “模块化的JAR文件允许库的维护者发布单个工件,该工件既可以在Java 9及更高版本上作为模块使用,又可以在所有版本中作为类路径上的常规JAR文件使用。”
  • 基本模块定义并导出了平台的所有核心软件包”,“被命名为java.base ”,是“模块系统唯一已知的唯一模块”,“始终存在”,并由所有其他模块所依赖,并且不依赖其他模块。
  • 所有“平台模块”均以“ java. ”开头java. 前缀和“可能包括“用于数据库连接的 java.sql ,用于XML处理的 java.xml和用于日志记录的 java.logging 。”
  • 前缀“ jdk. ”应用于“ Java SE 9平台规范中未定义的模块”,但“特定于JDK”的名称。
  • 隐含可读性 :关键字public可以在之后添加requires关键字状态给定的模块的模块读取可以通过读取它依赖模块读取。 换句话说,如果模块B根据requires public引用了模块C提供的包,则该包可由可以读取模块B的模块A读取。
  • 通过使用关键字的在Java模块系统便于“经由服务接口和服务提供商的程序组件的松耦合” provides ... with ...以指示何时一个模块提供的服务的实现,并通过使用关键字uses指示模块何时使用提供的服务。
  • 因为给定的类与单个模块关联,所以Class::getModule()将允许访问类的关联模块。
  • “每个类加载器都有一个唯一的未命名模块 ”,从中加载与模块公开的包无关的类型。 可以使用新方法ClassLoader::getUnnamedModule检索给定的类加载器的未命名模块。
    • 未命名的模块可以读取所有其他模块,并且可以被所有其他模块读取。
  • “ JMOD”是“新工件格式”的“临时”名称,“新工件格式”“超出JAR文件”,用于保存“本机代码,配置文件和其他自然不适合…放入JAR文件中的数据”。 目前,这是JDK的一部分,有可能在以后的Java SE中进行标准化。

上面概述的项目不包括“模块系统状态”中涵盖的“高级主题”,例如合格的出口,增加的可读性和层次。 原始文档也值得一读,因为它具有更深入的说明,简短的代码清单和说明性图形。

拼图项目和OSGi

与OSGi一样,Project Jigsaw旨在在基于Java的应用程序中实现更大的模块化。 我期待看到内置的模块化支持是否可以提供与OSGi提供的某些相同的优点,同时消除或减少与OSGi相关的一些缺点。 杰西卡·桑恩斯比(Jessica Thornsby)在Mule Drop OSGi For Beo 太复杂的文章中,总结了一些开发人员对OSGi的劣势的看法,这些想法导致Spring和Mule等停止使用OSGi。 Thornsby的文章引用了Dmitry Sklyut , Kirk Knoerschild和Ian Skerrett的话 ,他们认为更好的工具,更好的文档(包括社区),在会议上更好的曝光以及通过使用获得更多的熟悉度将有助于OSGi的采用并有助于克服被认为是艰难的学习曲线和复杂性。

我很好奇,如果Java平台内置的模块化功能几乎可以自动带来OSGi倡导者认为可以提高OSGi的采用率的某些功能。 我怀疑Project Jigsaw通过内置到平台中会获得更好的工具支持,更好地面向一般Java开发人员,并且会在Java开发人员社区(博客,会议,书籍等)中得到更广泛和广泛的覆盖。 凭借这些优势,我还想知道Java 9和Jigsaw是否会导致OSGi的当前用户离开OSGi,或者这些用户是否会找到创造性的方式来将两者一起使用或会做自己能做的事情(例如使用未命名的模块)使用OSGi而不是拼图。 由于OSGi可以在Java 9之前的Java版本上运行,而Jigsaw仅在Java 9和更高版本上可以运行,因此在Java 9的采用升温之前,可能不会急于将基于OSGi的应用程序迁移到Jigsaw。 Java 9的模块化:与Project Jigsaw,Penrose和OSGi堆叠在一起,可以对当前和即将到来的Java模块化方法进行有趣的讨论。

引用/相关资源

  • 模块系统的状态
  • 马克·雷因霍尔德(Mark Reinhold)的“ Java 9模块状态”的要点 (包括视频)
  • Java模块系统:初步了解
  • 拼图快速入门
  • Java 9中的模块化:与Jigsaw,Penrose和OSGi堆叠

翻译自: https://www.javacodegeeks.com/2015/09/jdk-9-highlights-from-the-state-of-the-module-system.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fckeditor漏洞_三十,文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御

一.编辑器漏洞 1.编辑器 编辑器属于第三方软件,它的作用是方便网站管理员上传或编辑网站上的内容,类似我们电脑上的Word文档。 编辑器通常分为两种情况: (1) 不需要后台验证,可以直接在前台访问且操作。通过方法找到编辑器&#x…

java学习笔记之条件语句(if...else)

条件语句用于基于不同的条件来执行不同的动作。 通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 JavaScript 中,我们可使用以下条件语句: if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码if...else 语句 …

iOS 学习之NSPredicate

电话号码验证表达式 (BOOL)validateMobile:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSStr…

javaScript学习笔记之break 和 continue 语句对比

break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 break 语句可用于跳出循环。 break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话): continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。 代码: <!DOCTYPE …

畅捷通T+任意文件上传(CNVD-2022-60632 )漏洞复现

一、漏洞描述 2022年8月29日和8月30日&#xff0c;畅捷通公司紧急发布安全补丁修复了畅捷通T软件任意文件上传漏洞。未经身份认证的攻击者利用该漏洞&#xff0c;通过绕过系统鉴权&#xff0c;在特定配置环境下实现任意文件的上传&#xff0c;从而执行任意代码&#xff0c;获得…

Spring 3使用JUnit 4进行测试– ContextConfiguration和AbstractTransactionalJUnit4SpringContextTests...

在Internet上寻找一种测试我的Spring 3应用程序的方法&#xff0c;我找到了许多描述如何使用JUnit测试应用程序的文章。 它们中的大多数都是不完整的示例&#xff0c;实际上并不起作用。 在这篇文章中&#xff0c;我将尝试填补这一空白&#xff0c;并撰写一篇简洁而简单的文章&…

RecyclerView滑动到底部自动加载

你经常听到“上拉加载”这样的字眼吗&#xff1f;你知道这个功能是怎么实现的吗&#xff1f;这篇文章记录了我对“上拉加载”的实现&#xff0c;与大家一起分享。 “上拉加载”针对的是RecyclerView或者Listview这样的列表控件&#xff08;本文以RecyclerView为例&#xff09;&…

javaScript学习笔记之typeof, null, 和 undefined之间的对比

typeof 操作符 你可以使用 typeof 操作符来检测变量的数据类型。 null 在 JavaScript 中 null 表示 "什么都没有"。 null是一个只有一个值的特殊类型。表示一个空对象引用。 undefined 在 JavaScript 中, undefined 是一个没有设置值的变量。 typeof 一个没有值的变量…

不喜欢节流吗?

您别无选择–基础系统&#xff08;此处的JVM将为您完成此选择&#xff09;。 我仍然记得2013年夏天&#xff0c;当时我正在运行一个项目&#xff0c;整个应用程序中只有1个URL使服务器瘫痪。 问题很简单-机器人决定以很高的速率索引我们的网站&#xff0c;并且该机器人正在创建…

OData V4 系列 查询操作

OData 学习目录 对OData的操作&#xff0c;主要是查询&#xff0c;下面把相关的查询情况列出来&#xff0c;供参考学习&#xff0c;每个操作都有对应的截图&#xff0c;便于理解 默认查询 $expand 查询导航属性关系 &#xff0c;查询Product相关的Supplier $top、$skip、$orde…

JSP项目打开不通的查看详情页动画是放大状态的解决办法

背景:前段时间做了一个详情页在当前页面的放大缩小的动画效果,——>我是如何用Jquery实现网页缩小放大的 今天测试反馈:详情页是缩小状态,点击关闭后打开其他的查看详情页页面,还是默认的缩小状态,需要做成,每次打开默认是放大的效果。 截图: 这个系统比较老,boots…

CentOS7--yum安装

1、创建yum文件夹 [roottester ~]# cd /usr/local/ [roottester local]# ls aegis bin etc games include lib lib64 libexec sbin share src [roottester local]# mkdir ./yum [roottester local]# cd yum2、下载yum源文件 http://mirrors.163.com/centos/7/os/x86…

单点登陆的三种实现方式

背景:单点登录(Single Sign On, SSO)是指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的应用系统。举例来说,百度贴吧和百度地图是百度公司旗下的两个不同的应用系统,如果用户在百度贴吧登录过之后,当他访问百度地图时无需再次登录,那么就…

gorm 密码字段隐藏_KeeWeb for mac(密码管理工具)

KeeWeb是一个非常专业的密码管理工具。这款工具支持Mac OS X&#xff0c;Windows和Linux平台&#xff0c;不需要任何安装和工作在所有现代浏览器&#xff0c;搜索任何条目或查看所有文件中的所有项目作为一个列表。功能非常强大实用。本站现在提供KeeWeb Mac版下载&#xff0c;…

zabbix主动、被动检测的详细过程与区别

最近项目再写采集器采集软件指标的功能&#xff0c;借此机会学习学习zabbix监控的一些知识。 http://www.ttlsa.com/zabbix/zabbix-active-and-passive-checks/ zabbix agent检测分为主动&#xff08;agent active&#xff09;和被动&#xff08;agent&#xff09;两种形式&…

Centos7下按装Docker和docker-compose及环境配置

删除之前安装的 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engineyum remove docker-ce docker-ce-selinux container-selin…

你也在你的应用上添加B站上的弹幕效果

背景:现在弹幕已成为各大视频网站的标配,其实,弹幕最早是诞生于日本的一个二次元网站Niconico。后来A站和B站将其引入,开启了国内弹幕文化的先河。 开源地址:https://github.com/zerosoul/rc-bullets 相比点赞、转发、评论,弹幕的形式让用户的互动性更强,因此也更受大家…

google earth pro 64位_七彩虹秀精准刀工!iGame RTX 3060 Ti Advanced OC评测:烤机3小时64度...

一、前言&#xff1a;精准控制散热 七彩虹展现神奇刀法这次没有让大家等太久&#xff0c;在RTX 3080上市仅仅2个月之后&#xff0c;RTX 3060 Ti也终于来到了大家面前。这也是安培构架第一款售价在3000元以下的甜点产品。七彩虹公司也同步发售了5款iGame RTX 3060 Ti系列显卡&am…

伪类

伪类 - 元素的特殊状态&#xff08;一般为动态状态&#xff0c;在获得一个状态的同时&#xff0c;将失去另一个状态。&#xff09; 后来扩展为&#xff0c;逻辑上存在&#xff0c;但是在DOM中无需标示的分类。 <a> 标签专属的四个伪类 :link - 未访问状态&#xff08;默认…

流性能

当我阅读Angelika Langer的Java性能教程时-Java 8流有多快&#xff1f; 我简直不敢相信&#xff0c;对于一个特定的操作&#xff0c;它们花费的时间比循环要长15倍。 流媒体性能真的会那么糟糕吗&#xff1f; 我必须找出答案&#xff01; 巧合的是&#xff0c;我最近观看了一个…