跳到主要內容

Java 模組(Module)

  


頻道需要你的支持,謝謝你成為我們的會員(加入會員)

影片1 模組介紹與建立模組專案


影片2 模組設定的進階使用



範例


Java 模組系統是在 Java 9 中引入的一項重要功能,其目的是解決 Java 應用程式在管理大型專案的依賴性時所面臨的一些挑戰。

例如:

  • 類別路徑 (Classpath) 混亂: 大型專案中,類別庫之間的依賴關係複雜,容易出現類別路徑混亂。
  • 封裝性不足: 傳統 Java 缺乏有效的封裝機制,應用程式內部類別可能被外部存取,造成安全風險。
  • 程式碼臃腫: 應用程式可能包含未使用或不必要的類別庫,增加部署 package 的大小。

 

模組化使得應用程式的結構更加清晰易於維護和部署並提昇安全性。

一、什麼是 Java 模組?

Java 模組是管理 package 的組織,它定義了哪些類別是可見的,哪些是隱藏的。這使得開發人員可以更好地控制程式碼的封裝和依賴關係,從而提高軟體的可維護性和安全性。

每一個模組都有一個唯一的名稱,並包含以下資訊:

  • 請求的模組: 模組所依賴的其他模組。
  • 輸出的 package 模組中可供外部存取的 package
  • 提供的服務: 模組提供的介面的實作類別。
  • 使用的服務: 模組可被使用的介面。

 

模組的基本結構

Java 模組由一個模組描述檔(module descriptor)和一群 package 組成。

模組描述檔是命名為 `module-info.java` 的文件,這個文件位於模組的根目錄下。

module example.module {

requires java.sql;

exports com.example.package;

}

二、建立 Java 模組專案(NetBeans)

步驟一:新增模組專案

步驟二:認識模組描述檔

default package 有一個名為 `module-info.java` 的文件,在其中定義模組的名稱和依賴項。

module moduleName {

}

步驟三:新增 package class

步驟四:編寫模組描述檔

requires  moduleName; (宣告要 請求/依賴 的模組)

exports  packageName; (宣告要輸出的 package, 使其他模組可以請求)

requires transitive moduleName;

exports packageName to moduleName;

 

三、模組的優點

l   封裝性:模組可以有效地限制外部存取,隱藏其內部實現細節,只暴露需要公開的 API 來提高程式碼的安全性。

l   解決衝突:模組化可以避免同名 package 之間的衝突,這在大型應用程式尤為重要。

l   依賴管理:模組可以明確指定其依賴,從而避免了傳統 Classpath 帶來的依賴混亂問題。

l   性能優化:模組系統允許 JVM 僅載入需要的模組,從而提高應用程式的啟動速度和運行性能。

四、uses, provides

uses interfaceName ; (宣告可被使用的介面)

provides interfaceName with ClassName; (宣告實作 uses 界面的類別)