Java模組化 - 恆逸教育訓練中心
文章推薦指數: 80 %
Java 5新增加強型迴圈、Annotation與Generic,Java 8新增的Lambda,都讓Java程式設計語言產生很大的變化。
Java 9新增的模組化,雖然對程式設計語言本身並 ...
Java技術在二十幾年來的版本,Java5、8與9的變化最大。
Java5新增加強型迴圈、Annotation與Generic,Java8新增的Lambda,都讓Java程式設計語言產生很大的變化。
Java9新增的模組化,雖然對程式設計語言本身並沒有影響,不過對JDK與應用程式的架構進行非常大的修改。
從Java7開始支援嵌入式應用程式設計,把JDK規劃為三種compactprofile,可以簡單的分為大、中、小。
大表示完整的JDK,中表示省略一些特定用途的API,小則是最精簡的JDK,只有基礎的API。
應用程式可以使用工具程式判斷適合在哪一種環境運作,對於小型應用程式來說,可以在最精簡的執行環境運作,佔用的空間與資源可以減少,效率也會比較好一些。
不同於Java7固定為三種profile的作法,Java9使用全新模組化的架構,在類別、套件之上,加入模組(Module)的架構。
JDK把原有的API分為不同的模組,每個模組包含數個套件,例如java.base模組包含java.lang、java.util等套件。
應用程式可以使用工具程式判斷需要使用的模組,再為應用程式產生專屬的執行環境,這樣可以讓執行環境更符合應用程式的需求。
Java應用程式常久以來,一直都要面對ClassPath產生的問題,錯誤的設定與設計,經常會造成很難判斷原因的錯誤。
應用程式也可以使用模組化架構,在套件之上,將應用程式規劃為不同的模組,模組與模組之間可以設定相依性與服務。
讓應用程式架構比較不容易產生相依性的問題,還有增加重複使用的特性。
每一個Java模組都有自己的定義,只有指定為公開部份,才可以讓別的模組使用。
例如兩個模組各自包含數個套件,其中modulea的x套件使用moduleb的m套件,模組必須根據相依性執行相關的設定,moduleb沒有設定的n套件,其它模組就不能使用:
為了讓應用程式架構更靈活,通常會採用介面或抽象類別減低相依性。
Java9模組加入服務的設計,讓模組與模組之間的相依性更加靈活。
例如modulea的y套件宣告一個Hellointerface,在moduleb的n套件HelloImpl實作Hellointerface,透過Java9新增的API,可以在執行時期取得實作的類別物件:
如果原有的應用程式與程式庫沒有重新定義模組,Java9也有對應的設計,讓它們成為自動模組或沒有名稱的模組,針對不同的特性升級為模組化元件,同樣可以在模組化的應用程式架構中運作。
您可在下列課程中了解更多技巧喔!
相關學習資源
SL-110-SE11JavaSE11初階程式設計
SL-275-SE11JavaSE11程式語言設計
延伸文章資訊
- 1JVM 與module-path - OpenHome.cc
首先,對於模組平臺系統要知道的第一件事是,它跟Java 程式語言本身沒有關係,而是為了管理程式庫本身的功能封裝、程式庫之間的相依性等需求而存在,將一個不支援模組 ...
- 2遷移!往Java 9前進!
修改 java.base 的module-info顯然不是可行的方式,在Oracle JDK中提供了一個非標準引數 --add-exports , 可用來放寬(或說是破壞)模組封裝,例如,可以在...
- 3Java 9模組化概觀 - iThome
而在最新的JDK9預覽版中,也可以玩玩Java模組平臺系統(Java Platform Module System),也就是JSR376的實作了。 JAR檔案的挑戰. 撰寫Java的開發者都知道...
- 4理解Java 9 的模組. 模組是什麼及什麼時候要使用它們 - Medium
本文中,我將介紹Java 9 Platform Module System (JPMS) [譯註:這專案名稱就不翻譯了,翻成中文也沒什麼意思],自Java 出現以來,最重要的新軟體工程 ...
- 5java9學習筆記之模組化詳解 - 程式前沿
讓Java的SE程式更加容易輕量級部署改進元件間的依賴管理,引入比Jar粒度更大的Module 改進效能和安全性如果用更加簡單解釋,那就是”解決Classpath地獄 ...