文章图片
文章图片
文章图片
Java9新特性中的模块化到底是什么Java9中的一个重大特性是增加了一种新型的程序设计组件 - 模块 。
官方对模块的定义为:一个被命名的 , 代码和数据的自描述集合 。 ( the module which is a named self-describing collection of code and data) 。
【阿里巴巴|Java9新特性中的模块化到底是什么】这个在Java7的时候就已经被提出 , 但由于其复杂性 , 不断跳票Java7、Java8 , 直到Java9才姗姗来迟的模块化 , 到底是什么 , 在实际coding中又有什么用呢?
我们主要从以下三个方面来分析:
- What模块化是什么
- How模块化怎么用
- Why为什么要用模块化
模块是Java9中新增的一个组件 , 可以简单理解为是package的上级容器 , 是多个package的集合 , 一个jar可以有多个module , 一个module可以有多个package 。 从代码结构上看 , jar >module> package > class interface 。
Java9的模块通过requires和exports关键字 , 对自身所依赖(requires)的模块和自身暴露(exports)出去的内容(package)进行了声明 。 本模块只能使用其他模块暴露(exports)出来的内容(package) , 其他模块也只能使用本模块暴露(exports)出去的内容(package) 。
Java9的模块化和Maven的区别在于Maven管理的是整个jar的依赖 , 关注的是整体 。 而模块化管理的是这个jar中的模块需要对外暴露的内容和对外依赖的模块 , 关注的是细节 。 maven的依赖是将整个jar都给你了 , 哪怕你仅仅只需要其中的一个类 。 模块化的依赖则是更细粒度的package的管理 , 你只能使用你依赖的模块下被暴露出来的package 。
那么 , 模块化怎么用呢?
我们搭建一个简单的modular-demo项目 , 分为modular-common , modular-persistent , modular-service , modular-web 4个子项目 。
4个子项目的定位为:
modular-common:通用层 , 主要提供常量类、工具类、枚举类等通用代码 。
modular-persistent:持久层 , 主要提供数据库领域实体domain类 , 数据操作接口dao 。
modular-service:service层 , 主要提供业务逻辑处理的service及其实现类 。
modular-web:web层 , 主要对外提供api接口 , 视图渲染 , 输入输出数据处理等功能 。
4个子项目的maven依赖关系为:
modular-persistent依赖modular-common
modular-service依赖modular-persistent
modular-web依赖modular-service
每个项目的代码大致如下:
与传统Maven项目不同的是 , 每个子项目下面都有着自己的module-info.java , 里面声明了项目中的模块暴露出去的包和需要依赖的模块 。
注意:我们提到的模块均是指Java9中的模块 , 不是指maven中的模块 , maven中的模块是指可以构建为一个jar或者war的项目 , 本质是一个项目 , 所以我们用子项目来表示maven中的模块 。 每个子项目可以有多个模块 , demo中每个子项目只包含了一个模块 , 但不代表只能有一个模块 。
common模块的module-info.java
module 后面的modular.demo.common声明了本模块的模块名 , 是本模块的唯一标识 , 其它模块可以通过这个标识来声明对这个模块的依赖 。
- 阿里巴巴|商标热点丨俄罗斯允许无偿使用“不友好国家”的知识产权;腾讯注册“微信连一连”
- 阿里巴巴|新人程序员如何顺利度过试用期,让你受益终身的几个技能
- 阿里巴巴|广告收入增速放缓,核心净利降幅近五成!2022年百度仍不考虑盈利?
- 阿里巴巴|Keep递交招股书:运动科技“独角兽”到底是不是“伪成长股”?
- 阿里巴巴|对于电商小白来说,淘宝和抖音小店哪个更适合入门?
- 阿里巴巴|美企接连做出决定后,阿里早已准备好“备胎”,马云果然有远见
- 阿里巴巴|继华为之后,又一科技创新企业被老美制裁,就连软件也被终止授权
- 阿里巴巴|“不良网站”里那些“成人视频”,是怎么来的?你知道吗?
- 阿里巴巴|中国第一大民企诞生,营收高达9516亿,超过华为、阿里巴巴
- 阿里巴巴|马云果然用心良苦!又一美企加入断供,阿里10年前布局对了