內容簡介
本書是一本經典而實用的Spring學習指南,介紹了Spring使用框架、Spring Boot,以及Spring系統中的其他組成部分。
本書分為4個部分,共18章。第1部分(第1章~第6章)涵蓋了構建Spring套用的基礎知識。第2部分(第7章~第10章)討論了如何講Spring套用與其他套用進行集成。第3部分(第11章~第14章)探討了Spring對反應式編程提供的全新支持。第4部分(第15章~第18章)介紹了如何做好套用投入生產環境前的準備工作,以及如何進行部署。
本書適合剛剛開始學習Spring Boot和Spring框架的Java開發人員閱讀,也適合想要超越基礎知識並學習Spring新特性的經驗豐富的Spring開發者參考。
圖書目錄
第 1部分 Spring基礎
第 1章 Spring起步 3
1.1 什麼是Spring 4
1.2 初始化Spring套用 6
1.2.1 使用Spring Tool Suite初始化Spring項目 7
1.2.2 檢查Spring項目的結構 9
1.3 編寫Spring套用 15
1.3.1 處理Web請求 16
1.3.2 定義視圖 17
1.3.3 測試控制器 18
1.3.4 構建和運行套用 19
1.3.5 了解Spring Boot
DevTools 21
1.3.6 回顧一下 23
1.4 俯瞰Spring風景線 24
1.4.1 Spring核心框架 24
1.4.2 Spring Boot 24
1.4.3 Spring Data 25
1.4.4 Spring Security 25
1.4.5 Spring Integration和
Spring Batch 25
1.4.6 Spring Cloud 26
1.4.7 Spring Native 26
1.5 小結 26
第 2章 開發Web套用 27
2.1 展現信息 28
2.1.1 構建領域類 29
2.1.2 創建控制器類 32
2.1.3 設計視圖 36
2.2 處理表單提交 39
2.3 校驗表單輸入 46
2.3.1 聲明校驗規則 47
2.3.2 在表單綁定的時候執行校驗 49
2.3.3 展現校驗錯誤 50
2.4 使用視圖控制器 51
2.5 選擇視圖模板庫 53
2.5.1 快取模板 55
2.6 小結 55
第3章 使用數據 57
3.1 使用JDBC讀取和寫入數據 57
3.1.1 調整領域對象以適應持久化 59
3.1.2 使用JdbcTemplate 60
3.1.3 定義模式和預載入數據 66
3.1.4 插入數據 68
3.2 使用Spring Data JDBC 73
3.2.1 添加Spring Data JDBC到構建檔案中 74
3.2.2 定義存儲庫接口 74
3.2.3 為領域類添加持久化的註解 76
3.2.4 使用CommandLineRunner預載入數據 78
3.3 使用Spring Data JPA持久化數據 80
3.3.1 添加Spring Data JPA到項目中 80
3.3.2 將領域對象標註為實體 81
3.3.3 聲明JPA存儲庫 84
3.3.4 自定義JPA存儲庫 85
小結 88
第4章 使用非關係型數據 89
4.1 使用Cassandra存儲庫 90
4.1.1 啟用Spring Data Cassandra 90
4.1.2 理解Cassandra數據模型 93
4.1.3 為Cassandra持久化映射領域類型 93
4.1.4 編寫Cassandra存儲庫 99
4.2 編寫MongoDB存儲庫 100
4.2.1 啟用Spring Data MongoDB 101
4.2.2 將領域類型映射為文檔 102
4.2.3 編寫MongoDB存儲庫接口 105
小結 106
第5章 保護Spring 107
5.1 啟用Spring Security 107
5.2 配置Spring Security 110
5.2.1 基於記憶體的用戶詳情服務 111
5.2.2 自定義用戶認證 112
5.3 保護Web請求 118
5.3.1 保護請求 118
5.3.2 創建自定義的登錄頁 121
5.3.3 啟用第三方認證 123
5.3.4 防止跨站請求偽造 126
5.4 實現方法級別的安全 127
5.5 了解用戶是誰 129
小結 132
第6章 使用配置屬性 133
6.1 細粒度地調整自動配置 134
6.1.1 理解Spring的環境抽象 134
6.1.2 配置數據源 136
6.1.3 配置嵌入式伺服器 137
6.1.4 配置日誌 138
6.1.5 使用特定的屬性值 140
6.2 創建自己的配置屬性 140
6.2.1 定義配置屬性的持有者 143
6.2.2 聲明配置屬性元數據 145
6.3 使用profile進行配置 147
6.3.1 定義特定profile的屬性 147
6.3.2 激活profile 149
6.3.3 使用profile條件化地創建bean 150
小結 151
第 2部分 Spring集成
第7章 創建REST服務 155
7.1 編寫RESTful控制器 156
7.1.1 從伺服器中檢索數據 156
7.1.2 傳送數據到伺服器端 162
7.1.3 在伺服器上更新數據 163
7.1.4 刪除伺服器上的數據 165
7.2 啟用數據後端服務 165
7.2.1 調整資源路徑和關係名稱 168
7.2.2 分頁和排序 170
7.3 消費REST服務 171
7.3.1 GET資源 173
7.3.2 PUT資源 174
7.3.3 DELETE資源 174
7.3.4 POST資源 175
小結 176
第8章 保護REST 177
8.1 OAuth 2簡介 178
8.2 創建授權伺服器 183
8.3 使用資源伺服器保護API 190
8.4 開發客戶端 193
小結 198
第9章 傳送異步訊息 199
9.1 使用JMS傳送訊息 200
9.1.1 搭建JMS環境 200
9.1.2 使用JmsTemplate傳送訊息 202
9.1.3 接收JMS訊息 210
9.2 使用RabbitMQ和
AMQP 214
9.2.1 添加RabbitMQ到Spring中 215
9.2.2 通過RabbitTemplate傳送訊息 216
9.2.3 接收來自RabbitMQ的訊息 220
9.3 使用Kafka的訊息 224
9.3.1 為Spring搭建支持Kafka訊息的環境 224
9.3.2 通過KafkaTemplate傳送訊息 226
9.3.3 編寫Kafka監聽器 228
小結 229
第 10章 Spring集成 231
10.1 聲明一個簡單的集成流 232
10.1.1 使用XML定義集成流 233
10.1.2 使用Java配置集成流 235
10.1.3 使用Spring Integration的DSL配置 237
10.2 Spring Integration功能概覽 238
10.2.1 訊息通道 239
10.2.2 過濾器 240
10.2.3 轉換器 241
10.2.4 路由器 243
10.2.5 切分器 244
10.2.6 服務激活器 247
10.2.7 網關 249
10.2.8 通道適配器 250
10.2.9 端點模組 252
10.3 創建電子郵件集成流 253
小結 261
第3部分 反應式Spring
第 11章 理解反應式編程 265
11.1 反應式編程概覽 266
11.1.1 定義反應式流 267
11.2 初識Reactor 269
11.2.1 繪製反應式流圖 270
11.2.2 添加Reactor依賴 271
11.3 使用常見的反應式操作 272
11.3.1 創建反應式類型 272
11.3.2 組合反應式類型 276
11.3.3 轉換和過濾反應式流 280
11.3.4 在反應式類型上執行邏輯操作 290
小結 292
第 12章 開發反應式API 293
12.1 使用Spring WebFlux 293
12.1.1 Spring WebFlux簡介 294
12.1.2 編寫反應式控制器 296
12.2 定義函式式請求處理器 300
12.3 測試反應式控制器 304
12.3.1 測試GET請求 304
12.3.2 測試POST請求 307
12.3.3 使用實時伺服器進行測試 308
12.4 反應式消費REST API 309
12.4.1 獲取資源 310
12.4.2 傳送資源 312
12.4.3 刪除資源 313
12.4.4 處理錯誤 313
12.4.5 交換請求 315
12.5 保護反應式Web API 316
12.5.1 配置反應式Web套用的安全性 317
12.5.2 配置反應式的用戶詳情服務 318
12.6 小結 320
第 13章 反應式持久化數 321
13.1 使用R2DBC 321
13.1.1 為R2DBC定義領域實體 322
13.1.2 定義反應式存儲庫 326
13.1.3 測試R2DBC存儲庫 328
13.1.4 定義OrderRepository的聚合根服務 330
13.2 反應式地持久化MongoDB文檔數據 336
13.2.1 定義領域文檔類型 337
13.2.2 定義反應式MongoDB存儲庫 340
13.2.3 測試反應式MongoDB存儲庫 340
13.3 反應式地持久化Cassandra數據 344
13.3.1 定義使用Cassandra持久化的領域類 344
13.3.2 創建反應式Cassandra存儲庫 348
13.3.3 測試反應式Cassandra存儲庫 349
小結 351
第 14章 使用RSocket 353
14.1 RSocket概覽 354
14.2 創建簡單的RSocket伺服器和客戶端 355
14.2.1 使用請求-回響通信模型 356
14.2.2 處理請求-流的訊息 359
14.2.3 傳送即發即忘的訊息 361
14.2.4 雙向傳送訊息 363
14.3 通過WebSocket傳輸RSocket 366
小結 367
第4部分 部署Spring
第 15章 使用Spring Boot Actuator 371
15.1 Actuator概覽 371
15.1.1 配置Actuator的基礎路徑 373
15.1.2 啟用和禁用Actuator端點 373
15.2 消費Actuator端點 374
15.2.1 獲取套用的基礎信息 375
15.2.2 查看配置細節 378
15.2.3 查看套用的活動 386
15.2.4 挖掘套用運行時的指標 388
15.3 自定義Actuator 391
15.3.1 為“/info”端點提供息 391
15.3.2 實現自定義的健康指示器 396
15.3.3 註冊自定義的指標 398
15.3.4 創建自定義的端點 399
15.4 確保Actuator的安全 402
小結 404
第 16章 管理Spring
16.1 使用Spring Boot
Admin
16.1.1 創建Admin伺服器 406
16.1.2 註冊Admin客戶端 407
16.2 探索Admin伺服器 409
16.2.1 查看套用基本的健康狀況和信息 409
16.2.2 觀察核心指標 410
16.2.3 探查環境屬性 410
16.2.4 查看和設定日誌級別 411
16.3 保護Admin伺服器 412
16.3.1 為Admin伺服器啟用登錄功能 412
16.3.2 為Actuator啟用認證 413
小結 414
第 17章 使用JMX監控Spring 415
17.1 使用Actuator MBean 415
17.2 創建自己的MBean 418
17.3 傳送通知 419
17.4 小結 421
第 18章 部署Spring 423
18.1 權衡各種部署方案 424
18.2 構建可執行JAR檔案 425
18.3 構建容器鏡像 426
18.3.1 部署至Kubernetes 428
18.3.2 啟用優雅關機功能 430
18.3.3 處理應用程式的存活和就緒狀態 431
18.4 構建和部署WAR檔案 434
18.5 以終為始 436
18.6 小結 436
附錄 初始化Spring套用 437
A.1 使用Spring Tool Suite初始化項目 437
A.2 使用IntelliJ IDEA初始化項目 440
A.3 使用NetBeans初始化項目 441
A.4 在start.spring.io中初始化項目 445
A.5 使用命令行初始化項目 447
A.5.1 curl和Initializr API 448
A.5.2 Spring Boot命令行接口 449
A.6 構建和運行項目 450
作者簡介
Craig Walls是Pivotal的工程師。他是Spring框架的熱心推動者,經常在本地用戶組和會議上發言,撰寫關於Spring的文章。在不琢磨代碼的時候,Craig經常計畫去迪斯尼世界或迪斯尼的下一次旅行,他希望儘可能多地陪伴他的妻子、兩個女兒和寵物。