1.对Java9的初步了解
- Java9-jigsaw拼图
相当于Java8-lambda表达式。
2. 原本整个程序就是一个整体。
a) 在Java8及更老的版本当中,集合,Scanner等,都放在了rt.jar包。
大小:60.6 MB
- 而在Java9当中,这些东西都不在一个rt.jar包当中了,而是设置在了Java.base.jmod
大小为15.9MB。是因为其余的45MB都已经设置在了别模块了!
- 模块化可以解决哪些问题?
本来没有的选,但是现在有的选了,只用一部分功能
a) 将一个整应用拆分成为4个模块,我们可以选择用某个功能。
b) 而这个模块运用方面:可以选择设置公开内容,可以设置私有内容;即权限控制。
4. java 8、java9的区别比较
在一个jar包当中,都是可以随意访问。比如public,但是虽然为运用提供了便利,但是确是把运用条件给随意化了,jar包可以被任意访问。
但是在Java9可以运用模块化,对模快施加更加精确地权限控制。
2.Module-info.java
1.·一个全新的描述文件,他不是类,也不是interface,此文件只是比package更大的组织配置文件。
2.·它在Java9中,加了一个基本模快配置文件,但它也就是一个配置文件。
exports 对外暴露的包路径(模块外可见)
requires 需要依赖的模块名称(也就是jar包依赖)
3 Java 9中的模块非常多,但是只有一个模块不需要设置,就可以被默认实现访问。
3.将IDEA项目改造为java模快
- 如何改造成java模快的文件呢?
- New project 然后删除src文件
- 创建一个moudle文件
然后然后这并不是java9中的模快,它只是idea工具中的文件夹而已。
- 接下类继续下一步操作才能把一个文件编程一个java9当中的模块:
- 设置模块中的依赖和权限
在模块化one中,首先类前堤是publi,然后想要出包,被别的模块访问,可以在util文件中设置一下exports.
- 在two的模块中,想要访问one的类方法,虽然已经在utilCan文件中设置了exports,但是想要访问one,还得关联一下,找到demo01,(因为demo02没有设置exports,所以在two模块中自然无法访问)如下操作:
在这个过程中,就算你已经在two模块中,导入了包,愣写也是无法用到one模块中的东西,因为没有exports。
4.模块的服务提供与服务消费
面向接口编程
就是CDE三个模块随便变动,直接影响了B模块,但是影响不了A。以下是对上图的实现。
- 设置服务的提供者与消费者
现在one模块中创建一个API提供者,创建了一个抽象方法,在创建一个impl实现类,
并且对外实现exports API 提供者。
在two模块中实现uses MyService;
- 模块间使用接口服务
上述中,已经创建好了,API服务提供者,然后怎么让服务消费者运用?
需要一些API。
- 需要一个加载器:就能拿到MyService,也能拿到实现类