欢迎光临散文网 会员登陆 & 注册

珠峰前端架构师培养计划2021-太乙近天都,连山接海隅

2022-12-02 00:17 作者:山观那恭喜囧昂贵的  | 我要投稿


JDK - JDK9模块化系统的新特点
JAVA模块化开发

珠峰前端架构师培养计划2021

download:https://www.51xuebc.com/thread-407-1-1.html
Java从来没有停止过模块化的尝试,提出的superpackages,JAVA模块系统直到Jigsaw这个原型项目的出现,这个原本计划和Java7一起交付的功能才延迟到Java9。作为一个原型项目,Jigsaw提供了JPMS(Java平台模块系统)规范的参考实现。
另一个是独立于Java社区的OGSI。到目前为止,OSGi已经发展了20多年,OSGi是应用程序模块化事实上的标准。一方面,OGSI不是Java平台的直接组件,所以不会影响平台本身的模块化开发。另一个重要因素是,OSGi使用类加载器实现的模块化隔离,这与Jigsaw基于可访问性规则实现的隔离机制完全不同。
话说回来,为什么模块化如此重要?
首先,JAVA本身就是不断臃肿的。从JAVA 1.1的不足10M到JAVA 8的200M+,安装空间和内存需求都相应增加。虽然这种增加是新功能迭代带来的,但是这些新功能大部分是大众化的;但换个角度来说,每一个新功能都会对不需要的用户造成膨胀。可以肯定的是,没有一个工程师或者团队会使用Java提供的所有能力(比如你做web项目的时候,你得带上swing)。
另一方面,也是OSGI能够发展的原因。它依靠类加载器实现业务级的隔离,并且具有动态加载的能力,这也使得插件机制或者热加载机制有了非常大的发挥空间。
Java 9中的模块系统


模块化的前提是模块划分,JDK本身也被模块化了。详情见openjdk.org/jeps/200。

Java的模块体系到底是什么?官方说法是,模块化给包增加了更高层次的聚合,包括一组密切相关的包和资源以及一个新的模块描述符文件。简单来说就是一个Java包的包抽象。
目前,模块系统有四种类型的模块,如下表所示。

类型描述备注系统模块Java SE和JDK模块,通过list-modules可以看到完整的列表/应用模块业务自定义模块/自动模块。将非模块jar添加到模块路径时,将创建一个名为jar的模块。1.默认情况下,将导出所有包。2.默认情况下,可以访问所有其他模块的类将不会被命名。当jar或类被添加到类路径中时,所有这些类都将被添加到未命名的模块中。1.只有其他未命名的模块和自动模块将被导出。这意味着应用程序模块不能访问这些类。2.它可以访问所有模块的类。
我们通过一个小案例,也就是上表中的应用模块,直观地体验一下模块化。
模块外壳
这个案例包含两个模块,glmapper.modules模块用于导出您自己的服务,test.modules模块用于测试和引用第一个模块。
运行模块
构建模块()


// modules是生成产品的输出目录。

#需要指定模块路径和主类来运行模块。
> java -模块-路径模块-m test.modules/com.glmapper.bridge.main.TestMain
>您好,Glmapper模块!
复制代码
如你所见,我们得到了正确的结果。
然后让我们测试另一个场景,即在没有在glmapper.modules中导出包的情况下重新构建包时获得的结果

1个错误
复制代码
可以看到,在编译test.modules时,它会检测它所依赖的模块中的包是否已经导出,如果没有导出,就无法编译。
使用界面
在上面的案例中,为了方便测试,模块中提供了一个可访问的静态方法;让我们继续转换,在glmapper.modules中提供接口及其实现,并使用提供的指令...用和来实现与测试模块的交叉引用

在glmapper.modules中提供一个HelloService接口

摘要
本文介绍了Java模块化。通过本文,你可以大致了解Java模块化开发的基本情况,以及Java 9提供的模块化和OSGI模块化的区别。然后我通过一个案例向你介绍了Java模块化的基本用法,希望对你有所帮助。

珠峰前端架构师培养计划2021-太乙近天都,连山接海隅的评论 (共 条)

分享到微博请遵守国家法律