好
影片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 界面的類別)