本書是一本經(jīng)典而實(shí)用的Spring學(xué)習(xí)指南,介紹了Spring使用框架、Spring Boot,以及Spring系統(tǒng)中的其他組成部分。
本書分為4個(gè)部分,共18章。第1部分(第1章~第6章)涵蓋了構(gòu)建Spring應(yīng)用的基礎(chǔ)知識(shí)。第2部分(第7章~第10章)討論了如何講Spring應(yīng)用與其他應(yīng)用進(jìn)行集成。第3部分(第11章~第14章)探討了Spring對(duì)反應(yīng)式編程提供的全新支持。第4部分(第15章~第18章)介紹了如何做好應(yīng)用投入生產(chǎn)環(huán)境前的準(zhǔn)備工作,以及如何進(jìn)行部署。
本書適合剛剛開始學(xué)習(xí)Spring Boot和Spring框架的Java開發(fā)人員閱讀,也適合想要超越基礎(chǔ)知識(shí)并學(xué)習(xí)Spring新特性的經(jīng)驗(yàn)豐富的Spring開發(fā)者參考。
(1)《Spring實(shí)戰(zhàn) 第5版》新升級(jí)——第六版重磅上市!本次增加了反應(yīng)式編程相關(guān)的新技術(shù)新進(jìn)展,包括RSocket和R2DBC;新增了K8s云原生環(huán)境下構(gòu)建和部署的實(shí)踐指南;移除了一些已經(jīng)過(guò)時(shí)的內(nèi)容,緊跟科技發(fā)展!
(2)保持一貫的易讀易懂風(fēng)格,書中精心設(shè)計(jì)的章節(jié)和示例非常適合讀者由淺入深地學(xué)習(xí)Spring!
(3)贈(zèng)送配套源代碼,方便操作上手,助力你地spring學(xué)習(xí),快來(lái)使用Spring和Spring Boot搭建屬于自己的應(yīng)用!
Craig Walls是Pivotal的高級(jí)工程師。他是Spring框架的熱心推動(dòng)者,經(jīng)常在本地用戶組和會(huì)議上發(fā)言,撰寫關(guān)于Spring的文章。在不琢磨代碼的時(shí)候,Craig經(jīng)常計(jì)劃去迪斯尼世界或迪斯尼樂(lè)園的下一次旅行,他希望盡可能多地陪伴他的妻子、兩個(gè)女兒和寵物。
第 1部分 Spring基礎(chǔ)
第 1章 Spring起步 3
1.1 什么是Spring 4
1.2 初始化Spring應(yīng)用 6
1.2.1 使用Spring Tool Suite初始化Spring項(xiàng)目 7
1.2.2 檢查Spring項(xiàng)目的結(jié)構(gòu) 9
1.3 編寫Spring應(yīng)用 15
1.3.1 處理Web請(qǐng)求 16
1.3.2 定義視圖 17
1.3.3 測(cè)試控制器 18
1.3.4 構(gòu)建和運(yùn)行應(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è)計(jì)視圖 36
2.2 處理表單提交 39
2.3 校驗(yàn)表單輸入 46
2.3.1 聲明校驗(yàn)規(guī)則 47
2.3.2 在表單綁定的時(shí)候執(zhí)行校驗(yàn) 49
2.3.3 展現(xiàn)校驗(yàn)錯(cuò)誤 50
2.4 使用視圖控制器 51
2.5 選擇視圖模板庫(kù) 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 定義存儲(chǔ)庫(kù)接口 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到項(xiàng)目中 80
3.3.2 將領(lǐng)域?qū)ο髽?biāo)注為實(shí)體 81
3.3.3 聲明JPA存儲(chǔ)庫(kù) 84
3.3.4 自定義JPA存儲(chǔ)庫(kù) 85
小結(jié) 88
第4章 使用非關(guān)系型數(shù)據(jù) 89
4.1 使用Cassandra存儲(chǔ)庫(kù) 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存儲(chǔ)庫(kù) 99
4.2 編寫MongoDB存儲(chǔ)庫(kù) 100
4.2.1 啟用Spring Data MongoDB 101
4.2.2 將領(lǐng)域類型映射為文檔 102
4.2.3 編寫MongoDB存儲(chǔ)庫(kù)接口 105
小結(jié) 106
第5章 保護(hù)Spring 107
5.1 啟用Spring Security 107
5.2 配置Spring Security 110
5.2.1 基于內(nèi)存的用戶詳情服務(wù) 111
5.2.2 自定義用戶認(rèn)證 112
5.3 保護(hù)Web請(qǐng)求 118
5.3.1 保護(hù)請(qǐng)求 118
5.3.2 創(chuàng)建自定義的登錄頁(yè) 121
5.3.3 啟用第三方認(rèn)證 123
5.3.4 防止跨站請(qǐng)求偽造 126
5.4 實(shí)現(xiàn)方法級(jí)別的安全 127
5.5 了解用戶是誰(shuí) 129
小結(jié) 132
第6章 使用配置屬性 133
6.1 細(xì)粒度地調(diào)整自動(dòng)配置 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進(jìn)行配置 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 分頁(yè)和排序 170
7.3 消費(fèi)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章 保護(hù)REST 177
8.1 OAuth 2簡(jiǎn)介 178
8.2 創(chuàng)建授權(quán)服務(wù)器 183
8.3 使用資源服務(wù)器保護(hù)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 接收J(rèn)MS消息 210
9.2 使用RabbitMQ和
AMQP 214
9.2.1 添加RabbitMQ到Spring中 215
9.2.2 通過(guò)RabbitTemplate發(fā)送消息 216
9.2.3 接收來(lái)自RabbitMQ的消息 220
9.3 使用Kafka的消息 224
9.3.1 為Spring搭建支持Kafka消息的環(huán)境 224
9.3.2 通過(guò)KafkaTemplate發(fā)送消息 226
9.3.3 編寫Kafka監(jiān)聽器 228
小結(jié) 229
第 10章 Spring集成 231
10.1 聲明一個(gè)簡(jiǎn)單的集成流 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 過(guò)濾器 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 端點(diǎn)模塊 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 初識(shí)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)換和過(guò)濾反應(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簡(jiǎn)介 294
12.1.2 編寫反應(yīng)式控制器 296
12.2 定義函數(shù)式請(qǐng)求處理器 300
12.3 測(cè)試反應(yīng)式控制器 304
12.3.1 測(cè)試GET請(qǐng)求 304
12.3.2 測(cè)試POST請(qǐng)求 307
12.3.3 使用實(shí)時(shí)服務(wù)器進(jìn)行測(cè)試 308
12.4 反應(yīng)式消費(fèi)REST API 309
12.4.1 獲取資源 310
12.4.2 發(fā)送資源 312
12.4.3 刪除資源 313
12.4.4 處理錯(cuò)誤 313
12.4.5 交換請(qǐng)求 315
12.5 保護(hù)反應(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)式存儲(chǔ)庫(kù) 326
13.1.3 測(cè)試R2DBC存儲(chǔ)庫(kù) 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存儲(chǔ)庫(kù) 340
13.2.3 測(cè)試反應(yīng)式MongoDB存儲(chǔ)庫(kù) 340
13.3 反應(yīng)式地持久化Cassandra數(shù)據(jù) 344
13.3.1 定義使用Cassandra持久化的領(lǐng)域類 344
13.3.2 創(chuàng)建反應(yīng)式Cassandra存儲(chǔ)庫(kù) 348
13.3.3 測(cè)試反應(yīng)式Cassandra存儲(chǔ)庫(kù) 349
小結(jié) 351
第 14章 使用RSocket 353
14.1 RSocket概覽 354
14.2 創(chuàng)建簡(jiǎn)單的RSocket服務(wù)器和客戶端 355
14.2.1 使用請(qǐng)求-響應(yīng)通信模型 356
14.2.2 處理請(qǐng)求-流的消息 359
14.2.3 發(fā)送即發(fā)即忘的消息 361
14.2.4 雙向發(fā)送消息 363
14.3 通過(guò)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端點(diǎn) 373
15.2 消費(fèi)Actuator端點(diǎn) 374
15.2.1 獲取應(yīng)用的基礎(chǔ)信息 375
15.2.2 查看配置細(xì)節(jié) 378
15.2.3 查看應(yīng)用的活動(dòng) 386
15.2.4 挖掘應(yīng)用運(yùn)行時(shí)的指標(biāo) 388
15.3 自定義Actuator 391
15.3.1 為“/info”端點(diǎn)提供息 391
15.3.2 實(shí)現(xiàn)自定義的健康指示器 396
15.3.3 注冊(cè)自定義的指標(biāo) 398
15.3.4 創(chuàng)建自定義的端點(diǎn) 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 注冊(cè)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è)置日志級(jí)別 411
16.3 保護(hù)Admin服務(wù)器 412
16.3.1 為Admin服務(wù)器啟用登錄功能 412
16.3.2 為Actuator啟用認(rèn)證 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)機(jī)功能 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初始化項(xiàng)目 437
A.2 使用IntelliJ IDEA初始化項(xiàng)目 440
A.3 使用NetBeans初始化項(xiàng)目 441
A.4 在start.spring.io中初始化項(xiàng)目 445
A.5 使用命令行初始化項(xiàng)目 447
A.5.1 curl和Initializr API 448
A.5.2 Spring Boot命令行接口 449
A.6 構(gòu)建和運(yùn)行項(xiàng)目 450