我們知道,在Java 9中,一個重要的改變就是模塊化系統的引入,Java 9的模塊化系統源於Jigsaw Project,我們首先看下Jigsaw Project的實現目標:
-
模塊化JDK:我們知道,現有JDK已經非常龐大,Jigsaw Project的目標就是將JDK分隔成一個個的小模塊。
-
模塊化源碼:當前源碼jar文件也非常大,特別是rt.jar,Jigsaw Project也會考慮將源碼切分成一個個的小模塊。
-
重構JDK和JRE運行時映像以適應模塊化的目的
-
封裝絕大部分內部API,僅暴露幾個重要的、使用頻繁的內部API
-
實現Java平臺的模塊化系統,允許用戶通過構建自己的模塊來開發應用程序,
-
jlink, the Java Linker:jlink工具的主要目標是" Allowing the user to create executable to their applications "
當前Java系統的主要問題
-
JDK太過於龐大以至於很難縮減應用到小的設備中去,Java 8 中通過引入三種類型的壓縮配置文件來解決這個問題:compact1, compact2, compact3,但事實上卻無法解決。
-
Jar文件比如rt.jar太大無法用於較小的設備和應用中去
-
因爲JDK太大,導致我們的應用或者設備無法提供更好的性能
-
當前Java系統中沒有實現很好的封裝效果,每個人都可以訪問public修飾符修飾的對象
-
因爲JDK和JRE太過龐大,對應用的測試和維護也相對較爲困難
-
因爲public修飾符太過開放,因此一些內部API比如:
sun.*, *.internal.*
也不可避免的暴露出來。 -
正因爲用戶可以訪問內部接口,因此安全性也是一個不小的問題
-
應用過於龐大
-
很難支持組件之間的低耦合
Java 9 模塊化系統的優勢
- 因爲Java 9 將JDK、JRE、JAR文件切分成了一個個的小模塊,因此,我們可以根據實際需要任意使用我們需要的模塊,並且可以很方便的通過剔除不必要的模塊,將應用部署到小的設備中去。
- 易於測試和維護
- 可以支持更好的性能表現
- 兼具良好的開放與更好的封裝特性
- 用戶將無法訪問一些主要用於內部的API接口
- 模塊隱藏了內部細節,提供了很好的安全特性
- 應用將更加小巧,因爲我們只需要部署用到的模塊
- 支持組件間的低耦合
- 支持單一責任原則(SRP, Single Responsibility Principle )
Java 8 vs Java 9
Java 8 的文件夾結構
Java 9 的文件夾結構
Java 9中不再包含rt.jar 和tool.jar,取而代之的是一個個模塊.jmod
Java 9中的模塊定義
模塊就是包含代碼、數據與資源的自描述集合。
Mother of Java 9 Module System
Oracle將JDK jars 和 Java SE 規範分成了兩個模塊集:
- 所有的JDK模塊均以
jdk.*
開頭 - 所有的Java SE規範模塊均以
“java.
開頭
注意,這裏面有一個java.base
模塊,即我們所熟知的基礎模塊,它是一個完全獨立的模塊,並不依賴於其他任何模塊。默認情況下,所有的模塊均依賴於此模塊,這也是java.base
被稱爲The Mother of Java 9 Modules
的原因,它是所有JDK模塊和用戶自定義模塊的默認模塊。
Java 8 和Java 9 應用程序對比
Java 8 應用程序通常如下:
Java 9 應用程序與前者相差不大,但引入了一個新的“模塊”組件,以及一個模塊描述符module-info.java
Java 8 的應用程序中,Packages
是頂層組件,Java 9應用程序中Module
是作爲頂層組件。簡單來講,模塊組成要素如下:
- One Module
- Module Name
- Module Descriptor
- Set of Packages
- Set of Types and Resources
原文鏈接