Java9 模塊化 Jigsaw 入門指引

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章