当前位置:首页 > 技术文章 > 正文内容

终于拿到阿里架构师分享的557页深入理解Java模块系统文档

arlanguage1个月前 (03-27)技术文章10

前言

Java 9通过模块系统将零散的拼图拼凑到了一起,模块系统成了Java平台的核心而不是扩展功能。Java的模块系统必须有所妥协。它不仅要保持对大量现有代码的支持,使其不至于破坏现有的生态系统,还要为不断变化的世界中尚待编写的代码提供一些有意义的帮助。

从技术层面来说,你需要理解模块和依赖的本质,以及语法和组件化的细节;从设计角度来说,你需要了解使用模块所带来的好处与坏处。像任何概念或观点一样,模块化不可以随便地加入到项目之中,采用模块化需要更多的技术和思考。现有代码在更加模块化的世界中会有什么样的改变?模块化会如何影响部署和开发?你需要知道这些问题以及你所探索问题的答案。

Java 9将Java平台模块系统(JPMS)引入到Java语言及其生态系统中,从此所有Java开发者都可以使用模块化原语。对于包括我自己在内的大多数人而言,这些是全新的概念,所以本文会从头讲起——从设计动机和基本概念一直讲到高级特性,以帮助大家了解Java模块系统。

目录

本文主要内容

本文的结构有几个层次。所有章节划分为3个部分,但你不必按顺序阅读。我会按照你的需求来建议不同的阅读范围和阅读顺序。

本文共15章,分为3个部分。

第一部分展示了模块系统要改善的Java的不足之处,并解释了模块系统的基本机制,以及如何创建、构建和运行模块化应用程序。

第1章指出了Java在JAR层面缺乏对模块化的支持,讨论了该缺陷的负面影响以及模块系统如何处理这些缺陷。

第2章展示了如何构建和运行一个模块化应用程序,并且介绍了贯穿本文的应用程序示例。这一章展示的是模块系统的全景,不会探寻细节——这是后面3章要做的事情。

第3章介绍了作为基本构建单元的模块声明,以及模块系统如何处理模块声明以实现它最重要的目标:让项目更加可靠、更容易维护。

第4章展示了如何利用javac和jar命令编译和打包一个模块化项目。

第5章讲述了java命令的一些新选项。启动一个模块化应用程序很简单,因此这一章主要展示发现并解决问题所需要的工具。

第二部分抛开了完全模块化的理想项目,演示了如何将现有项目迁移到Java 9及以上版本,并且逐步将之模块化。

第6章探寻了将现有代码迁移到Java 9时人们普遍会遇到的障碍(尚未涉及任何模块创建)。

第7章讨论了两个额外的难题。单独讨论是因为它们不局限于迁移,在对项目完成迁移和模块化后,你很可能依然会遇到它们。

第8章展示了如何对运行于Java 9上的大型项目进行模块化改造。好消息是,你没必要一次性完成这个工作。

第9章总结了前面3章的内容,帮助人们制定迁移和模块化现有代码的策略。

第三部分展示了构建于第一部分所介绍的基本概念之上的高级特性。

第10章讲述了模块系统如何对API的提供者和使用者进行隔离。

第11章扩展了第3章介绍的基本依赖和访问机制,为实现现实世界中的复杂场景提供了灵活性。

第12章讨论了反射是如何被拉下神坛的,开发者需要什么样的应用程序、库和框架以使反射代码工作,以及一些新的扩展反射API的强力特性。

第13章解释了为什么模块系统通常会忽略版本信息、它对版本的有限支持,以及运行同一个模块的多个版本的可行性——尽管这很复杂,但的确可行。

第14章利用所需的模块创建自己的运行时镜像,展示了如何从模块化JDK中受益,也通过将模块化应用程序打包到镜像中并制作单一的部署单元,展示了如何从模块化应用程序中受益。

第15章利用第三部分的所有花哨功能,展示了第2章所介绍的应用程序的全貌,并且为如何更好地利用模块系统提供了建议。

需要这份557页【深入理解Java模块系统】文档的小伙伴,,可以转发此文关注小编,私信小编【技能】来获取!!

本书读者

模块系统是一个非常有意思的话题。它的基本原理和概念都很简单,但是对整个Java生态系统的影响很深远。模块系统不像lambda表达式那样可以让人立即兴奋起来,但是可以像它那样彻底改变整个Java生态系统。到目前为止,模块系统已经像编译器、private访问修饰符、if条件语句一样成了Java的一部分。每个开发者都需要了解这些Java概念,同样,他们也需要了解模块系统。

值得庆幸的是,模块系统的入门很简单。模块系统的核心只有几个简单的概念,任何具备Java基础知识的开发者都可以理解。如果你知道访问修饰符的工作原理,粗略地了解如何使用javac、jar和java,并且知道JVM怎样从JAR文件中加载类,那么基本上就满足入门条件了。

如果你就是这样一位开发者,并且喜欢接受挑战,那么我鼓励你阅读本文。你不一定能马上融会贯通,但能够深入理解模块系统,并进一步理解Java生态系统。

另一方面,对模块系统的融会贯通,需要有两三年的Java项目开发经验。一般而言,你做过的项目越大,在架构演进、依赖选择,以及解决错误依赖带来的问题等方面参与得越深,你就越会感激模块系统带来的好处。同时,这也有助于你广泛地审视模块系统对已有项目以及Java生态系统的影响。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/3611.html

标签: java文档
分享给朋友:

“终于拿到阿里架构师分享的557页深入理解Java模块系统文档” 的相关文章

Nginx Lua编程基础

Lua是一门脚本动态语言,并不太适合做复杂业务逻辑的程序开发,但是,在高并发场景下,Nginx Lua编程是解决性能问题的利器。Nginx Lua编程主要的应用场景如下:API网关:实现数据校验前置、请求过滤、API请求聚合、AB测试、灰度发布、降级、监控等功能,著名的开源网关Kong就是基于Ngi...

深入Docker容器之日志篇

操作系统流重定向在linux系统中,运行一个命令,通常会是以下的方式:在linux 和 Unix系统中,在运行程序时,通常会有三种io流: stdin, stdout,stderr 。 stdin 是从外部设备或是键盘获取输入,而 stdout 是标准输出,stderr 是标准错误输出。而不管是标准...

01《Nginx 入门教程》Nginx 是什么?

关于 Nginx,百度百科的介绍如下:**Nginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务”。**首先,对 Web 服务器做一个简要说明:Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序...

nginx反向代理配置去除前缀

使用Nginx做代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。比如,访问abc.com/appv2/a/b.html, 要求转发到localhost:8088/appv2/a/b.html简单配置如下:upstream one { server localhost:8088 wei...

在SpringBoot+Vue3项目中通过Nginx代理WebSocket实现跨域通信

引言在现代Web开发中,实时数据交互变得越来越重要,而WebSocket作为HTML5标准的一部分,提供了一种全双工、长连接的通信方式,使得服务器与客户端可以进行双向实时通信。但在实际应用中,由于浏览器同源策略的限制,前端应用直接访问后端WebSocket服务可能会受到阻碍,尤其是在前后端部署不在同...

记一次nginx程序漏扫升级 nginx补丁升级

今天收到了一份服务器的漏扫报告,反馈服务器的nginx应用存在安全漏洞,需要升级nginx程序版本(程序升级只是修复安全漏洞的一部分,还有其他的操作,因为谈不上通用,文章中就不写了)。我首先上网查了查报告中反馈的漏洞信息,确认了漏洞涉及的程序版本,再登录服务器执行 nginx -v 确定了服务器当前...