Spring Boot 3:入門與應用實戰(簽名版)
LinkedBear
相關主題
商品描述
隨著JDK的升級與叠代,Spring Framework與Spring Boot也分別升級到了全新的6.0與3.0版本,全新的版本帶來了更加強大的功能和特性。本書側重於核心功能和特性的講解,重點講解Spring Framework與Spring Boot在應用開發中的核心與應用,通過多個方面介紹應用開發中涉及的場景。
本書分為六個部分,共15章。第一部分~第三部分介紹Spring Framework與Spring Boot的基礎與核心機制,包括IOC、AOP、Spring Boot應用特性;第四部分講解基於Spring Boot的WebMvc應用開發;第五部分對Dao層整合開發進行講解;第六部分則是Spring Boot的應用打包和生產級特性。
閱讀本書之前,建議讀者至少對Java Web有一定的瞭解。本書適合想要迅速上手Spring Framework和Spring Boot的入門級開發者,也適合想要深入提升Java開發能力的初級或中級開發者。
作者簡介
LinkedBear,資深Java工程師,Spring技術佈道師。長期專註於Spring框架體系的理論研究與實踐創新,對Spring、Spring Boot等框架有著獨到的見解,擁有豐富的框架體系實踐經驗和封裝架構經驗。
他撰寫的技術圖書,不僅深入剖析Spring框架體系的核心原理,更以“源碼級解析+場景化實戰”的講解模式,幫助開發者快速構建從原理認知到工程落地的完整知識體系,實現從理論到實戰的能力躍遷。
目錄大綱
第 1 章 Spring Framework 入門 3
1.1 Spring Framework 概述 3
1.2 Spring Framework 的發展歷史 5
1.3 Spring Framework 的組成結構 6
1.4 Spring 生態核心成員 7
1.5 開發環境準備 7
1.5.1 安裝JDK 8
1.5.2 安裝Maven 8
1.5.3 安裝IDEA 9
1.6 小結 9
第 2 章 IOC 思想與實現 10
2.1 IOC 是怎麼來的 10
2.1.1 原生Servlet 時代的三層架構 10
2.1.2 需求變更 16
2.1.3 源碼丟失 17
2.1.4 硬編碼問題 18
2.1.5 多次實例化 20
2.1.6 IOC 思想的引入 21
2.2 IOC 的兩種實現方式 22
2.2.1 依賴查找 22
2.2.2 依賴註入 25
2.2.3 依賴查找與依賴註入的對比 27
2.3 BeanFactory 與
ApplicationContext 28
2.3.1 理解IOC 容器 28
2.3.2 對比BeanFactory 與
ApplicationContext 28
2.3.3 理解Context 與
ApplicationContext 29
2.4 註解驅動的 IOC 30
2.4.1 註解驅動IOC 的依賴查找 30
2.4.2 註解驅動IOC 的依賴註入 31
2.4.3 組件註冊與掃描機制 31
2.4.4 註解驅動與XML 驅動互通 34
2.5 依賴查找進階與高級 34
2.5.1 ofType 34
2.5.2 withAnnotation 35
2.5.3 獲取所有Bean 36
2.5.4 延遲查找 37
2.6 依賴註入的 6 種方式 39
2.6.1 setter 方法與構造器註入 39
2.6.2 註解屬性註入 40
2.6.3 組件自動註入 43
2.6.4 復雜類型註入 49
2.6.5 回調註入 51
2.6.6 延遲註入 53
2.7 小結 54
第 3 章 IOC 容器中的 Bean 55
3.1 Bean 的類型 55
3.1.1 普通Bean 55
3.1.2 FactoryBean 56
3.2 Bean 的作用域 60
3.2.1 理解作用域 61
3.2.2 內置的作用域 61
3.2.3 單實例(singleton) 62
3.2.4 原型(prototype) 63
3.2.5 Web 中的擴展作用域 65
3.3 Bean 的實例化方式 66
3.3.1 普通Bean 實例化 66
3.3.2 借助FactoryBean 創建Bean 66
3.3.3 借助靜態工廠創建Bean 66
3.3.4 借助實例工廠創建Bean 68
3.4 Bean 的基本生命周期 68
3.4.1 生命周期的階段 69
3.4.2 init-method 和destroy-method 70
3.4.3 JSR-250 規範註解 72
3.4.4 InitializingBean 和
DisposableBean 74
3.4.5 原型Bean 的生命周期 76
3.4.6 生命周期擴展點對比 78
3.4.7 補充:Lifecycle 接口 78
目錄
3.5 小結 80
第 4 章 IOC 容器的設計與機制 81
4.1 BeanFactory 81
4.1.1 BeanFactory 接口系列 82
4.1.2 BeanFactory 的實現類 83
4.2 ApplicationContext 83
4.2.1 ApplicationContext 接口系列 83
4.2.2 ApplicationContext 的實現類 84
4.3 事件驅動與監聽器 85
4.3.1 觀察者模式 85
4.3.2 Spring 中的觀察者模式 85
4.3.3 事件與監聽器實踐 86
4.3.4 Spring 的內置事件 88
4.3.5 自定義事件開發 89
4.4 模塊裝配 92
4.4.1 前置概念解釋 92
4.4.2 手動裝配與自動裝配 92
4.4.3 使用簡單裝配 93
4.4.4 導入配置類 95
4.4.5 導入ImportSelector 97
4.4.6 導入ImportBeanDefinitionRegistrar 99
4.4.7 擴展:DeferredImportSelector 100
4.5 條件裝配 102
4.5.1 基於@Profile 註解的裝配 102
4.5.2 基於@Conditional 註解的裝配 104
4.5.3 擴展:@ConditionalOn×××註解 106
4.6 組件掃描機制 106
4.6.1 組件掃描的路徑 106
4.6.2 組件掃描的過濾 108
4.7 PropertySource 112
4.7.1 資源管理 112
4.7.2 @PropertySource 註解 113
4.7.3 引入YML 文件 114
4.8 小結 117
第二部分 Spring Boot 應用構建與核心特性
第 5 章 5.1 使用 Spring Boot 121
Spring Boot 概述 122
5.1.1 Spring Boot 的核心特性 122
5.1.2 Spring Boot 的體系 122
5.2 Spring Boot 快速使用 123
5.2.1 創建項目 123
5.2.2 快速編寫接口 128
5.2.3 打包運行 129
5.2.4 修改配置 130
5.3 Spring Boot 的依賴管理 130
5.3.1 場景啟動器 130
5.3.2 版本管理 131
5.4 Spring Boot 的自動裝配 132
5.4.1 組件自動裝配 132
5.4.2 默認組件掃描 133
5.4.3 配置屬性和外部化配置 133
5.4.4 自動配置類 134
5.4.5 自動配置報告 137
5.5 小結 138
第 6 章 Spring Boot 的最佳實踐 139
6.1 屬性配置 139
6.1.1 YML 格式語法 139
6.1.2 屬性綁定 142
6.2 外部化配置 146
6.2.1 Spring Boot 支持多種配置源 146
6.2.2 多環境開發 148
6.2.3 多環境配置文件 151
6.2.4 配置優先級 152
6.3 Banner 機制 153
6.3.1 Banner 的變更 153
6.3.2 Banner 的輸出模式 154
6.4 日誌的使用 154
6.4.1 日誌門面與實現 155
6.4.2 使用日誌打印 155
6.4.3 日誌格式 156
6.4.4 日誌級別 157
6.4.5 日誌分組 157
6.4.6 日誌輸出與歸檔 158
6.4.7 切換日誌實現 159
6.5 啟動過程的簡單擴展點 160
6.5.1 啟動過程簡單概述 160
6.5.2 啟動容器前的擴展 160
6.5.3 啟動容器時的擴展 160
6.5.4 啟動完成後的擴展 161
6.6 場景啟動器與自動裝配 161
6.6.1 場景啟動器的結構 162
6.6.2 自定義場景啟動器 162
6.7 啟動異常分析 166
6.7.1 FailureAnalyzer 167
6.7.2 重寫內置的異常分析 168
6.7.3 自定義異常分析 169
6.8 小結 170
第三部分 Spring Framework 的 AOP
第 7 章 AOP 思想與實現 175
7.1 AOP 是怎麼來的 175
7.1.1 日誌記錄 175
7.1.2 添加積分變動邏輯 177
7.1.3 引入設計模式 179
7.1.4 使用動態代理 182
7.1.5 代理對象的創建者 184
7.1.6 引入AOP 思想 188
7.2 AOP 的基礎-動態代理 188
7.2.1 JDK 動態代理的使用 188
7.2.2 Cglib 動態代理的使用 189
7.3 AOP 概述與術語 190
7.3.1 AOP 概述 190
7.3.2 AOP 的演變歷史 191
7.3.3 AOP 的基本術語 192
7.3.4 通知的類型 194
7.4 Spring Boot 使用 AOP-基於 AspectJ 194
7.4.1 搭建工程環境 195
7.4.2 前置測試代碼編寫 195
7.4.3 基於註解的AOP 編寫 196
7.4.4 切入點表達式的編寫方式 199
第四部分 7.4.5 使用環繞通知 203
7.5 Spring 使用 AOP-基於 XML 204
7.5.1 搭建工程環境 204
7.5.2 編寫配置文件 205
7.5.3 測試效果 207
7.5.4 其他註意事項 207
7.6 小結 207
第 8 章 AOP 的進階機制和應用 208
8.1 AOP 聯盟 208
8.2 通知方法參數 209
8.2.1 JoinPoint 209
8.2.2 ProceedingJoinPoint 的擴展 212
8.2.3 返回通知和異常通知的特殊參數 213
8.3 切麵的執行順序 213
8.3.1 多個切麵的執行順序 214
8.3.2 同切麵的多個通知執行順序 216
8.4 代理對象調用自身方法 217
8.5 小結 219
基於 WebMvc 的 Spring Boot Web 應用開發
第 9 章 使用 WebMvc 開發應用 223
9.1 整合 Web 和 WebMvc 223
9.1.1 MVC 三層架構 223
9.1.2 基於Servlet 3.0 規範整合Web 開發 224
9.1.3 Spring MVC 的歷史 228
9.1.4 基於Servlet 3.0 規範整合WebMvc 229
9.1.5 Spring Boot 整合WebMvc 233
9.2 視圖技術 234
9.2.1 Thymeleaf 概述與整合 235
9.2.2 Thymeleaf 快速上手 237
9.3 熱部署的使用 241
9.3.1 使用devtools 242
9.3.2 配置自動熱部署 242
9.4 頁面數據傳遞 243
9.4.1 頁面編寫 243
9.4.2 頁面跳轉 244
9.4.3 數據傳遞的方式 245
9.5 請求參數綁定 246
9.5.1 收集參數的方式 246
9.5.2 復雜類型參數收集 248
9.5.3 自定義參數類型轉換 252
9.6 常用註解的使用 254
9.6.1 @RequestMapping 254
9.6.2 @DateTimeFormat 255
9.6.3 @RestController 256
9.6.4 RESTful 編碼風格 256
9.7 JSON 支持 258
9.7.1 JSON 支持與配置 259
9.7.2 @ResponseBody 和
@RequestBody 259
9.8 靜態資源配置 261
9.8.1 默認的靜態資源位置 261
9.8.2 定製化靜態資源配置 262
9.9 數據校驗 262
9.9.1 頁面的數據校驗 263
9.9.2 後端的數據校驗 263
9.9.3 分組校驗 266
9.9.4 校驗錯誤信息外部化 267
9.10 內容協商 268
9.10.1 內容協商機制 268
9.10.2 基於請求頭的內容協商 269
9.10.3 基於請求參數的內容協商 270
9.11 異常處理 270
9.11.1 異常處理思路分析 270
9.11.2 @ExceptionHandler 註解 271
9.11.3 @ControllerAdvice 註解 272
9.11.4 多種異常處理共存 273
9.11.5 Spring Boot 的異常處理擴展 274
9.12 文件上傳與下載 276
9.12.1 基於表單的文件上傳 276
9.12.2 基於Ajax 的文件上傳 277
9.12.3 文件下載 278
9.13 小結 280
第 10 章 WebMvc 開發進階 281
10.1 攔截器 281
10.1.1 區分攔截器與過濾器 281
10.1.2 攔截器的攔截時機 282
10.1.3 使用攔截器 283
10.1.4 多個攔截器的執行機制 284
10.2 國際化支持 286
10.2.1 約定的國際化 286
10.2.2 切換國際化語言 288
10.2.3 更改默認配置 289
10.3 原生 Servlet 支持與適配 290
10.3.1 全局獲取request 和
response 290
10.3.2 請求轉發與重定向 291
10.3.3 操縱request 域數據 292
10.3.4 操縱session 域數據 295
10.3.5 獲取請求頭的數據 296
10.3.6 註冊Servlet 原生組件 297
10.4 跨域問題 299
10.4.1 同源策略與跨域問題 299
10.4.2 演示跨域現象 300
10.4.3 CORS 解決跨域問題 301
10.4.4 @CrossOrigin 註解的細節 302
10.4.5 全局設置跨域 303
10.5 REST 服務請求與調用 303
10.5.1 RestTemplate 303
10.5.2 RestClient 308
10.5.3 HTTP 聲明式接口 310
10.6 Reactive 與 WebFlux 312
10.7 小結 312
第 11 章 嵌入式容器 313
11.1 Web 容器對比 313
11.2 使用嵌入式 Tomcat 314
11.3 定製嵌入式容器 315
11.3.1 修改配置屬性 315
11.3.2 使用定製器 316
11.4 替換嵌入式容器 317
11.5 SSL 配置 317
11.6 小結 319
第五部分 Spring Boot 的數據訪問能力整合
第 12 章 JDBC 與事務 323
12.1 整合 JDBC 323
12.1.1 數據庫準備 323
12.1.2 導入依賴 324
12.1.3 快速使用 325
12.1.4 Spring Framework 整合
JDBC 328
12.1.5 Spring Boot 整合JDBC 329
12.2 使用 JdbcTemplate 331
12.2.1 基本使用 331
12.2.2 JdbcTemplate 應用於Dao 層 337
12.2.3 查詢策略 339
12.3 JDBC 事務管理 340
12.3.1 事務回顧 340
12.3.2 原生JDBC 事務 341
12.4 Spring Framework 的事務管理 343
12.4.1 代碼準備 343
12.4.2 編程式事務控制 344
12.4.3 聲明式事務控制 345
12.4.4 事務控制失效的場景 347
12.5 事務傳播行為 347
12.5.1 理解事務傳播行為 347
12.5.2 事務傳播行為的7 種策略 349
12.5.3 使用事務傳播行為 350
12.6 數據庫初始化機制 351
12.6.1 DDL 語句發送 351
12.6.2 DML 語句發送 352
12.6.3 多平臺兼容與初始化策略 353
12.7 小結 353
第 13 章 整合 MyBatis 354
13.1 MyBatis 概述 354
13.1.1 MyBatis 的歷史 354
13.1.2 MyBatis 的架構 355
13.1.3 MyBatis 的配置 356
13.2 整合MyBatis 356
13.2.1 導入依賴 356
13.2.2 準備基礎代碼 357
13.2.3 測試效果 359
13.3 MyBatis 簡單開發 360
13.3.1 常用的配置屬性 360
13.3.2 註解式Mapper 接口 361
13.3.3 動態SQL 361
13.3.4 緩存機制 362
13.3.5 插件機制 363
13.4 效率提升:整合
MyBatis-Plus 364
13.4.1 MyBatis-Plus 概述 364
13.4.2 Spring Boot 整合
MyBatis-Plus 365
13.5 使用MyBatis-Plus 368
13.5.1 CRUD 基礎接口 368
13.5.2 Wrapper 機制 369
13.5.3 主鍵策略與ID 生成器 371
13.5.4 邏輯刪除 371
13.5.5 樂觀鎖插件 372
13.5.6 分頁插件 373
13.5.7 代碼生成器 374
13.6 小結 375
第六部分 Spring Boot 應用的生產與運維
第 14 章 14.1 打包與部署 379
Spring Boot 應用打包 379
14.1.1 製作簡易工程 379
14.1.2 使用Maven 打包工程 380
14.1.3 運行工程與打包插件 381
14.2 使用外置 Servlet 容器運行 383
14.2.1 war 包方式打包的準備 383
14.2.2 製作war 包 384
14.3 製作 Docker 鏡像 385
14.3.1 Docker 基礎 385
14.3.2 Dockerfile 文件 386
14.3.3 使用Dockerfile 構建鏡像 386
14.3.4 使用Maven 插件構建鏡像 387
14.4 小結 389
第 15 章 15.1 生產級特性 390
Spring Boot Actuator 390
15.1.1 背景與方案 390
15.1.2 整合使用 391
15.2 監控端點 Endpoints 391
15.2.1 health 392
15.2.2 beans 393
15.2.3 conditions 394
15.2.4 configprops 和env 396
15.2.5 mappings 398
15.2.6 loggers 399
15.2.7 info 400
15.2.8 擴展health 400
15.2.9 擴展監控端點 403
15.2.10 保護端點安全 404
15.2.11 使用JMX 訪問 404
15.3 監控指標 Metrics 406
15.3.1 內置指標 406
15.3.2 自定義指標 407
15.3.3 基於場景的指標 408
15.4 管理 Spring Boot 應用 410
15.4.1 搭建Admin Server 411
15.4.2 應用註冊到Admin Server 412
15.4.3 查看應用實例信息 413
15.5 使用監控體系 416
15.5.1 監控系統Prometheus 416
15.5.2 Actuator 輸出到Prometheus 418
15.5.3 可視化監控平臺Grafana 420
15.5.4 利用Grafana 實現監控告警 422
15.6 小結 424