深入理解Java模塊系統( 簡體 字) | |
作者:[德]尼科萊·帕洛格(Nicolai Parlog) | 類別:1. -> 程式設計 -> JAVA -> Java |
出版社:人民郵電出版社 | 3dWoo書號: 53801 詢問書籍請說出此書號! 有庫存 NT售價: 595 元 |
出版日:1/1/2021 | |
頁數:348 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115552341 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 一部分 你好,模塊
第 1 章 第 一塊拼圖 2 1.1 什么是模塊化 3 1.1.1 用圖將軟件可視化 3 1.1.2 設計原則的影響 5 1.1.3 什么是模塊化 6 1.2 Java 9之前的模塊擦除 6 1.3 Java 9之前的問題 9 1.3.1 JAR之間未言明的依賴 9 1.3.2 同名類的覆蓋 10 1.3.3 同一項目不同版本間的沖突 12 1.3.4 復雜的類加載 13 1.3.5 JAR的弱封裝 13 1.3.6 手動安全檢查 14 1.3.7 較差的啟動性能 15 1.3.8 死板的Java運行時環境 15 1.4 鳥瞰模塊系統 15 1.5 你的第 一個模塊 17 1.5.1 模塊系統實戰 18 1.5.2 非模塊化項目基本不受影響 21 1.6 模塊系統的目標 22 1.6.1 可靠配置:不放過一個JAR 23 1.6.2 強封裝:控制模塊內部代碼的訪問權限 23 1.6.3 自動化的安全性和改善的可維護性 24 1.6.4 改善的啟動性能 24 1.6.5 可伸縮的Java平臺 24 1.6.6 非目標 25 1.7 新舊技能 25 1.7.1 你將學到什么 25 1.7.2 你應該知道些什么 26 1.8 小結 27 第 2 章 模塊化應用程序剖析 28 2.1 初識ServiceMonitor 28 2.2 模塊化ServiceMonitor 32 2.3 將ServiceMonitor劃分為模塊 32 2.4 文件的目錄結構布局 33 2.5 聲明和模塊描述 34 2.5.1 聲明模塊依賴 36 2.5.2 定義模塊的公有API 36 2.5.3 用模塊圖可視化ServiceMonitor 36 2.6 編譯和打包模塊 37 2.7 運行ServiceMonitor 39 2.8 擴展模塊化代碼庫 39 2.9 總結:模塊系統的效果 40 2.9.1 模塊系統能為你做什么 40 2.9.2 模塊系統還能為你做些什么 41 2.9.3 允許可選依賴 43 2.10 小結 44 第 3 章 定義模塊及其屬性 45 3.1 模塊:模塊化應用程序的基石 46 3.1.1 隨JDK發布的Java模塊(JMOD) 46 3.1.2 模塊化JAR:內生模塊 46 3.1.3 模塊聲明:定義模塊的屬性 47 3.1.4 模塊的眾多類型 51 3.2 可讀性:連接所有片段 53 3.2.1 實現可靠配置 54 3.2.2 用不可靠配置進行實驗 55 3.3 可訪問性:定義公有API 60 3.3.1 實現強封裝 62 3.3.2 封裝傳遞依賴 63 3.3.3 封裝的小沖突 64 3.4 模塊路徑:讓Java了解模塊 68 3.4.1 模塊解析:分析和驗證應用程序的結構 69 3.4.2 模塊圖:展示應用程序結構 71 3.4.3 向圖中添加模塊 73 3.4.4 向圖中添加邊 74 3.4.5 訪問性是一項持續的工程 74 3.5 小結 75 第 4 章 從源碼到JAR構建模塊 76 4.1 組織項目的目錄結構 76 4.1.1 新提議——新約定 77 4.1.2 默認的目錄結構 77 4.1.3 模塊聲明的位置 78 4.2 編譯單個模塊 79 4.2.1 編譯模塊代碼 79 4.2.2 模塊或非模塊 80 4.3 編譯多個模塊 82 4.3.1 直接編譯 82 4.3.2 模塊源代碼路徑:將項目結構告知編譯器 83 4.3.3 星號作為模塊名稱的標記 84 4.3.4 多模塊源路徑入口 85 4.3.5 設置初始模塊 85 4.3.6 值得嗎 86 4.4 編譯器選項 87 4.5 打包模塊化JAR 88 4.5.1 快速回顧jar工具 88 4.5.2 分析JAR 89 4.5.3 定義模塊入口點 89 4.5.4 歸檔選項 90 4.6 小結 91 第 5 章 運行和調試模塊化應用程序 92 5.1 通過JVM啟動模塊化應用程序 92 5.1.1 指定主類 93 5.1.2 如果初始模塊并非主模塊 93 5.1.3 向應用程序傳遞參數 95 5.2 從模塊中加載資源 95 5.2.1 Java 9之前的資源加載 96 5.2.2 Java 9及以上版本的資源加載 97 5.2.3 跨越模塊邊界加載包中資源 98 5.3 調試模塊及模塊化應用程序 99 5.3.1 分析單個模塊 99 5.3.2 驗證模塊集 100 5.3.3 驗證模塊圖 101 5.3.4 列出可見模塊及其依賴 102 5.3.5 在解析過程中排除模塊 104 5.3.6 通過日志信息觀察模塊系統 106 5.4 Java虛擬機選項 109 5.5 小結 110 第二部分 改寫現實世界中的項目 第 6 章 遷移到Java 9及以上版本的兼容性挑戰 112 6.1 使用JEE模塊 113 6.1.1 為什么JEE模塊很特殊 114 6.1.2 人工解析JEE模塊 115 6.1.3 JEE 模塊的第三方實現 116 6.2 轉化為URLClassLoader 117 6.2.1 應用程序類加載器的變化 117 6.2.2 不再通過URLClassLoader來獲得類加載器 118 6.2.3 尋找制造麻煩的強制類型轉換 119 6.3 更新后的運行時鏡像目錄布局 119 6.4 選擇、替換和擴展平臺 121 6.4.1 不再支持緊湊配置 121 6.4.2 擴展機制被移除 122 6.4.3 授權標準覆蓋機制被移除 122 6.4.4 某些啟動類路徑選項被移除 122 6.4.5 不支持Java 5編譯 122 6.4.6 JRE版本選擇被移除 123 6.5 一著不慎,滿盤皆輸 123 6.5.1 新的版本字符串 123 6.5.2 工具減少 124 6.5.3 瑣碎的事情 125 6.5.4 Java 9、Java 10和Java 11中新廢棄的功能 125 6.6 小結 125 第 7 章 在Java 9及以上版本中運行應用程序時會反復出現的挑戰 127 7.1 內部API的封裝 128 7.1.1 微觀視角下的內部API 129 7.1.2 使用JDeps分析依賴 131 7.1.3 編譯內部API 133 7.1.4 運行內部API 134 7.1.5 訪問內部API的編譯器和JVM選項 138 7.2 修復包分裂 139 7.2.1 包分裂的問題是什么 141 7.2.2 包分裂的影響 141 7.2.3 處理包分裂的多種方法 144 7.2.4 擴展模塊:處理包分裂的最后手段 145 7.2.5 使用JDeps查找分裂的包 146 7.2.6 關于依賴版本沖突的說明 147 7.3 小結 147 第 8 章 增量模塊化現有項目 149 8.1 為什么選擇增量模塊化 150 8.1.1 如果每個JAR都必須是模塊化的…… 150 8.1.2 讓普通JAR和模塊化JAR混搭 150 8.1.3 增量模塊化的技術基礎 151 8.2 無名模塊(類路徑) 152 8.2.1 無名模塊捕獲的類路徑混亂 154 8.2.2 無名模塊的模塊解析 155 8.2.3 取決于無名模塊 156 8.3 自動模塊:模塊路徑上的普通JAR 158 8.3.1 自動模塊名稱:小細節,大影響 159 8.3.2 自動模塊的模塊解析 162 8.3.3 無條件選擇自動模塊 168 8.3.4 依賴自動模塊 169 8.4 小結 170 第 9 章 遷移和模塊化策略 172 9.1 遷移策略 172 9.1.1 更新準備 173 9.1.2 工作量評估 173 9.1.3 基于Java 9及以上版本持續構建 175 9.1.4 關于命令行選項的領悟 178 9.2 模塊化策略 180 9.2.1 自下而上的模塊化:如果項目的所有依賴都已模塊化 182 9.2.2 自上而下的模塊化:如果應用程序無法等待其依賴 182 9.2.3 由內而外的模塊化:如果項目位于中間層級 183 9.2.4 在項目中應用這些策略 184 9.3 將JAR模塊化 185 9.3.1 作為中間步驟的開放式模塊 185 9.3.2 使用JDeps生成模塊聲明 186 9.3.3 黑客破譯第三方JAR 188 9.3.4 發布Java 8及更老版本的模塊化JAR 190 9.4 小結 192 第三部分 模塊系統高級特性 第 10 章 用服務來解耦模塊 194 10.1 探索對服務的需求 194 10.2 JPMS中的服務 196 10.2.1 使用、提供和消費服務 196 10.2.2 服務的模塊解析 201 10.3 良好地設計服務 203 10.3.1 可以作為服務的類型 204 10.3.2 將工廠用作服務 204 10.3.3 從全局狀態中隔離消費者 206 10.3.4 將服務、消費者和提供者組織成模塊 208 10.3.5 使用服務打破循環依賴 209 10.3.6 在不同的Java版本中聲明服務 211 10.4 使用ServiceLoader API訪問服務 213 10.4.1 加載和訪問服務 213 10.4.2 服務加載的特性 215 10.5 小結 216 第 11 章 完善依賴關系和API 218 11.1 隱式可讀性:傳遞依賴 219 11.1.1 公開模塊的依賴 219 11.1.2 傳遞修飾符:依賴的隱式可讀性 221 11.1.3 何時使用隱式可讀性 223 11.1.4 何時依賴隱式可讀性 223 11.1.5 基于隱式可讀性重構模塊 225 11.1.6 通過合并模塊來重構 228 11.2 可選依賴 229 11.2.1 可靠配置的難題 229 11.2.2 靜態修飾符:標記可選依賴 230 11.2.3 可選依賴的模塊解析 231 11.2.4 針對可選依賴編寫代碼 232 11.3 合規導出:將可訪問性限制在指定的模塊中 234 11.3.1 公開內部API 235 11.3.2 將包導出給模塊 236 11.3.3 什么時候使用合規導出 238 11.3.4 通過命令行導出包 239 11.4 小結 240 第 12 章 模塊化世界中的反射 241 12.1 為何exports指令不能很好地適用于反射 243 12.1.1 深入非模塊化代碼 243 12.1.2 使內部類型強制公有 243 12.1.3 合規導出導致對具體模塊的耦合 244 12.1.4 不支持深反射 244 12.2 開放式包和模塊:為反射而生 245 12.2.1 為運行時訪問開放式包 245 12.2.2 為特定模塊開放式包 246 12.2.3 導出包與開放式包的對比 247 12.2.4 開放式模塊:批量反射 248 12.3 針對模塊進行反射 249 12.3.1 更新模塊的反射代碼(或不更新) 249 12.3.2 使用變量句柄代替反射 251 12.3.3 通過反射分析模塊屬性 253 12.3.4 通過反射修改模塊屬性 255 12.3.5 轉發開放式包 256 12.4 動態創建帶有層的模塊圖 257 12.4.1 什么是層 258 12.4.2 分析模塊層 260 12.4.3 創建模塊層 262 12.5 小結 266 第 13 章 模塊版本:可能和不可能 268 13.1 JPMS中缺乏版本支持 268 13.1.1 不支持多版本 269 13.1.2 不支持版本選擇 271 13.1.3 未來會怎樣 273 13.2 記錄版本信息 273 13.2.1 在構建模塊時記錄版本 273 13.2.2 訪問模塊版本 274 13.3 在不同的層中運行同一個模塊的多個版本 276 13.3.1 為什么需要一個添加額外層的啟動器 277 13.3.2 為你的應用程序、Apache Twill 和Cassandra JavaDriver啟動層 277 13.4 小結 280 第 14 章 通過jlink定制運行時鏡像 281 14.1 創建自定義運行時鏡像 282 14.1.1 jlink入門 282 14.1.2 鏡像內容和結構 283 14.1.3 在運行時鏡像中包含服務 284 14.1.4 用jlink和jdeps調整鏡像大小 287 14.2 創建獨立的應用程序鏡像 288 14.2.1 在鏡像中包含應用程序模塊 289 14.2.2 為應用程序生成一個本地啟動程序 292 14.2.3 安全性、性能和穩定性 293 14.3 生成跨操作系統的鏡像 294 14.4 使用jlink插件優化鏡像 295 14.4.1 jlink的插件 295 14.4.2 減小鏡像尺寸 297 14.4.3 提高運行時性能 301 14.5 jlink選項 301 14.6 小結 302 第 15 章 完成拼圖 304 15.1 為ServiceMonitor添加裝飾 304 15.1.1 多樣化依賴 307 15.1.2 降低的可見性 308 15.1.3 通過服務解耦 308 15.1.4 在運行時通過層來加載代碼 308 15.1.5 處理對普通JAR的依賴 309 15.2 模塊化應用程序小貼士 309 15.2.1 是否模塊化 309 15.2.2 理想的模塊 310 15.2.3 注意模塊聲明 314 15.2.4 更改模塊聲明可能破壞代碼 316 15.3 技術前景 318 15.3.1 Maven、Gradle 以及其他構建工具 318 15.3.2 OSGi 320 15.3.3 微服務 323 15.4 關于模塊化生態系統的思考 325 15.5 小結 325 附錄A 類路徑回顧 326 附錄B 反射API的高級介紹 328 附錄C 通過統一日志觀察JVM 331 附錄D 利用JDeps 分析項目的依賴 336 附錄E 通過多發行版JAR支持多個Java版本 343 本書從Java模塊系統的設計動機和基本概念講起,一直延伸至其高級特性,詳盡介紹了模塊系統的基本機制,以及如何創建、構建和運行模塊化應用程序。本書還會幫助你將現有項目遷移到Java 9及以上版本,并逐步將之模塊化。書中主要內容包括:從源代碼到JAR 來構建模塊、遷移到模塊化Java、解耦依賴以及改進API、處理反射和版本、自定義運行時鏡像等等。
|