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