Java9正式版马上就要发布了,这里笔者先介绍下Java9 的模块化具体是怎么回事。
相比于Java,其实js领域很早就进行了模块化了。闲话少扯。今天我们来看看Java9是怎么做到模块化的。
熟悉Java的同学都知道,在Java(1--->8)之前,使用的都是一个很大的jar文件rt.jar 这个jar包在Java8 中有60多M.并且,在我们的Java代码运行时,还需要tools.jar这个jar,这个jar也不小。
也有十几M。这两个文件是运行一个Java程序最小的所需环境。也就是说运行一个Helloworld java程序也需要引入几十M的jar。
如果是在JavaEE的环境中。那么情况将变得更加复杂。
模块化可以让让JavaSE的程序更加轻量级更加容易部署。
模块就是代码和数据的封装体,代码是指一个packages,就是以前我们写的一个个的包。而模块是一个或者多个包的集合体。
我们这里可以看一下Java模块化的配置文件。
module module1 { //间接引用了java.sql模块 requires transitive java.sql; exports org.huluo.module1; }
上面的配置文件只导出了一个包org.huluo.module1
也就是说该模块的org.huluo.module1包下的class可以被引用。模块下的其他包中的类就算是public 修饰的类其他模块也不能引用到。这个话题后面会讲述到。
上面的配置文件做了三件事情,定义了模块module1,间接引用了java.sql模块和将org.huluo.module1包导出。
还有,在Java9中,public 访问修饰符不再意味着可以访问了。
模块之间的关系被称作readability(可读性),代表一个模块是否可以找到这个模块文件,并且读入系统中(注意:并非代表可以访问其中的类型)。在实际的代码,一个类型对于另外一个类型的调用,我们称之为可访问性(Accessible),这意味着可以使用这个类型; 可访问性的前提是可读性,换句话说,现有模块可读,然后再进一步检测可访问性(安全)。
在介绍一下什么是模块的Transitive引用(间接引用)
当我们的模块2引用了模块1,如果模块1引用了java.sql模块。实际上模块2是引用不到java.sql模块的。
但是如果我们将模块1的引用申明为间接引用了java.sql模块,则模块2可以引用到java.sql模块。
这个跟maven的依赖传递有点类似。
下面是demo工程:http://download.csdn.net/download/u013803262/9972059
参考自:http://www.jianshu.com/p/053a5ca89bbb