Java模組化

張益裕 Michael Chang

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:程式設計

 

 

Java技術在二十幾年來的版本,Java 5、8與9的變化最大。Java 5新增加強型迴圈、Annotation與Generic,Java 8新增的Lambda,都讓Java程式設計語言產生很大的變化。Java 9新增的模組化,雖然對程式設計語言本身並沒有影響,不過對JDK與應用程式的架構進行非常大的修改。

從Java 7開始支援嵌入式應用程式設計,把JDK規劃為三種compact profile,可以簡單的分為大、中、小。大表示完整的JDK,中表示省略一些特定用途的API,小則是最精簡的JDK,只有基礎的API。應用程式可以使用工具程式判斷適合在哪一種環境運作,對於小型應用程式來說,可以在最精簡的執行環境運作,佔用的空間與資源可以減少,效率也會比較好一些。

不同於Java 7固定為三種profile的作法,Java 9使用全新模組化的架構,在類別、套件之上,加入模組(Module)的架構。JDK把原有的API分為不同的模組,每個模組包含數個套件,例如java.base模組包含java.lang、java.util等套件。應用程式可以使用工具程式判斷需要使用的模組,再為應用程式產生專屬的執行環境,這樣可以讓執行環境更符合應用程式的需求。

Java應用程式常久以來,一直都要面對Class Path產生的問題,錯誤的設定與設計,經常會造成很難判斷原因的錯誤。應用程式也可以使用模組化架構,在套件之上,將應用程式規劃為不同的模組,模組與模組之間可以設定相依性與服務。讓應用程式架構比較不容易產生相依性的問題,還有增加重複使用的特性。

每一個Java模組都有自己的定義,只有指定為公開部份,才可以讓別的模組使用。例如兩個模組各自包含數個套件,其中module a的x套件使用module b的m套件,模組必須根據相依性執行相關的設定,module b沒有設定的n套件,其它模組就不能使用:



為了讓應用程式架構更靈活,通常會採用介面或抽象類別減低相依性。Java 9模組加入服務的設計,讓模組與模組之間的相依性更加靈活。例如module a的y套件宣告一個Hello interface,在module b的n套件HelloImpl實作Hello interface,透過Java 9新增的API,可以在執行時期取得實作的類別物件:



如果原有的應用程式與程式庫沒有重新定義模組,Java 9也有對應的設計,讓它們成為自動模組或沒有名稱的模組,針對不同的特性升級為模組化元件,同樣可以在模組化的應用程式架構中運作。


您可在下列課程中了解更多技巧喔!

相關學習資源