學(xué)透Spring:從入門(mén)到項(xiàng)目實(shí)戰(zhàn)
定 價(jià):159.8 元
- 作者:丁雪豐
- 出版時(shí)間:2023/2/1
- ISBN:9787115609113
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312.8
- 頁(yè)碼:568
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
本書(shū)的目標(biāo)是讓大家又快又好地打包學(xué)透 Spring 技術(shù)棧,內(nèi)容將涉及 Spring Framework、Spring Boot、 Spring Cloud 等 Spring 家族成員。 本書(shū)分為四部分:第一部分“Spring 入門(mén)”,先學(xué)習(xí)基本的 Spring IoC、AOP,隨后過(guò)渡到當(dāng)下熱門(mén)的 Spring Boot ;第二部分“Spring 中的數(shù)據(jù)操作”,其中既有常規(guī)的 SQL、NoSQL 數(shù)據(jù)操作,也有進(jìn)階的數(shù)據(jù)源配置和緩存抽象;第三部分“使用 Spring 開(kāi)發(fā) Web 應(yīng)用”,講述 Spring MVC 細(xì)節(jié)的同時(shí),也不放過(guò) Web 安全與 REST ;第四部分“使用 Spring 開(kāi)發(fā)微服務(wù)”,除了常規(guī)的 Spring Cloud 模塊,也會(huì)講解 Spring Cloud Alibaba。在講解具體內(nèi)容的基本示例之外,書(shū)中還設(shè)計(jì)了一個(gè)貫穿主要章節(jié)的實(shí)戰(zhàn)案例,帶大家一步步從零開(kāi)始實(shí)現(xiàn)一個(gè)靈活運(yùn)用全書(shū)內(nèi)容的項(xiàng)目“二進(jìn)制奶茶店”。 本書(shū)重實(shí)戰(zhàn)、重工程現(xiàn)實(shí),是業(yè)內(nèi)專業(yè)人員丁雪豐親歷的有效學(xué)習(xí)路徑,匯集了作者多年的實(shí)戰(zhàn)經(jīng)驗(yàn)。跟著兔子書(shū),只要具備 Java 基礎(chǔ)知識(shí),就可以快速上手 Spring,并落地實(shí)戰(zhàn)項(xiàng)目和生產(chǎn)環(huán)境。
1.【內(nèi)容全】詳細(xì)介紹Spring Boot等10+款Spring常用組件
2.【重實(shí)戰(zhàn)】注重工程實(shí)現(xiàn),書(shū)中的技術(shù)主題與業(yè)務(wù)開(kāi)發(fā)強(qiáng)關(guān)聯(lián)
3.【本土化】貼近實(shí)際工作場(chǎng)景,涵蓋國(guó)內(nèi)高頻使用的工具與組件
4.【大案例】“二進(jìn)制奶茶店”分布式系統(tǒng)案例貫穿全書(shū),即學(xué)即用
5.【作者強(qiáng)】超過(guò)15年一線開(kāi)發(fā)經(jīng)驗(yàn),大廠大型系統(tǒng)構(gòu)建經(jīng)驗(yàn)豐富
6.【易學(xué)習(xí)】1個(gè)大案例 | 355段代碼 | 44回茶歇 | 178張表 | 59幅圖
丁雪豐 美團(tuán)研究員、技術(shù)圖書(shū)作譯者、極客時(shí)間《玩轉(zhuǎn)Spring全家桶》課程講師。獲得了“上海市青年金才”“騰訊云價(jià)值專家”等稱號(hào)。致力于推動(dòng)先進(jìn)技術(shù)在國(guó)內(nèi)的發(fā)展,是Spring Framework 2.0和Spring Framework 2.5官方文檔翻譯項(xiàng)目的負(fù)責(zé)人,翻譯及原創(chuàng)出版了《Spring Boot實(shí)戰(zhàn)》《Spring攻略》《RESTful Web Services Cookbook中文版》等8部圖書(shū)。曾就職于平安壹錢(qián)包、百度與,在互聯(lián)網(wǎng)金融、支付等領(lǐng)域積累了豐富的大型系統(tǒng)構(gòu)建經(jīng)驗(yàn)。
第 一部分 Spring入門(mén)
第 1章 初識(shí) Spring 2
1.1 認(rèn)識(shí) Spring 家族 2
1.1.1 Spring 發(fā)展歷史 2
1.1.2 Spring 家族主要成員 4
1.2 編寫(xiě)第 一個(gè) Spring 程序 7
1.2.1 基礎(chǔ)環(huán)境準(zhǔn)備 8
1.2.2 通過(guò)Spring Initializr創(chuàng)建工程 12
1.2.3 編寫(xiě)簡(jiǎn)單的REST服務(wù) 14
1.3 實(shí)戰(zhàn)案例說(shuō)明 16
1.3.1 需求描述 16
1.3.2 模塊說(shuō)明 17
1.4 小結(jié) 19
第 2章 Spring Framework中的IoC容器 20
2.1 IoC容器基礎(chǔ)知識(shí) 20
2.1.1 什么是IoC容器 20
2.1.2 容器的初始化 21
2.1.3 BeanFactory與ApplicationContext 23
2.1.4 容器的繼承關(guān)系 24
2.2 Bean基礎(chǔ)知識(shí) 27
2.2.1 什么是Bean 27
2.2.2 Bean的依賴關(guān)系 27
2.2.3 Bean的三種配置方式 30
2.3 定制容器與Bean的行為 33
2.3.1 Bean的生命周期 33
2.3.2 Aware接口的應(yīng)用 37
2.3.3 事件機(jī)制 37
2.3.4 容器的擴(kuò)展點(diǎn) 39
2.3.5 優(yōu)雅地關(guān)閉容器 40
茶歇時(shí)間:Linux環(huán)境下如何關(guān)閉進(jìn)程 41
2.4 容器中的幾種抽象 42
2.4.1 環(huán)境抽象 42
2.4.2 任務(wù)抽象 44
茶歇時(shí)間:該怎么配置線程池 45
茶歇時(shí)間:本地調(diào)度vs.分布式調(diào)度 47
2.5 小結(jié) 47
第3章 Spring Framework中的AOP 48
3.1 Spring中的AOP 48
3.1.1 AOP的核心概念 48
3.1.2 Spring AOP的實(shí)現(xiàn)原理 49
茶歇時(shí)間:使用代理模式過(guò)程中的小坑 51
3.2 基于@AspectJ的配置 52
3.2.1 聲明切入點(diǎn) 53
茶歇時(shí)間:Spring AOP與AspectJ中PCD的不同之處 54
3.2.2 聲明通知 55
3.2.3 基于@AspectJ的示例 57
3.3 基于XML Schema的配置 61
3.3.1 聲明切入點(diǎn) 62
3.3.2 聲明通知 62
3.3.3 通知器 64
3.3.4 基于XML Schema的示例 64
茶歇時(shí)間:超簡(jiǎn)潔的JUnit單元測(cè)試入門(mén) 65
3.4 小結(jié) 66
第4章 從Spring Framework到Spring Boot 67
4.1 Spring Boot基礎(chǔ)知識(shí) 67
4.1.1 為什么需要Spring Boot 67
4.1.2 Spring Boot的組成部分 68
4.1.3 解析Spring Boot工程 70
4.2 起步依賴 71
4.2.1 Spring Boot內(nèi)置的起步依賴 72
4.2.2 起步依賴的實(shí)現(xiàn)原理 73
4.3 自動(dòng)配置 75
4.3.1 自動(dòng)配置的實(shí)現(xiàn)原理 75
茶歇時(shí)間:通過(guò)ImportSelector選擇性導(dǎo)入配置 76
4.3.2 配置項(xiàng)加載機(jī)制詳解 77
4.4 編寫(xiě)我們自己的自動(dòng)配置與起步依賴 79
4.4.1 編寫(xiě)自己的自動(dòng)配置 80
4.4.2 脫離Spring Boot實(shí)現(xiàn)自動(dòng)配置 83
4.4.3 編寫(xiě)自己的起步依賴 87
4.5 小結(jié) 88
第5章 面向生產(chǎn)的Spring Boot 89
5.1 Spring Boot Actuator概述 89
5.1.1 端點(diǎn)概覽 89
5.1.2 端點(diǎn)配置 92
茶歇時(shí)間:針對(duì)Web和Actuator使用不同端口的好處 95
5.1.3 定制端點(diǎn)信息 96
5.1.4 開(kāi)發(fā)自己的組件與端點(diǎn) 98
茶歇時(shí)間:為什么要優(yōu)先通過(guò)ObjectProvider獲取Bean 100
5.2 基于Micrometer的系統(tǒng)度量 101
5.2.1 Micrometer概述 102
5.2.2 常用度量指標(biāo) 103
5.2.3 自定義度量指標(biāo) 107
茶歇時(shí)間:性能分析時(shí)的95線與99線是什么含義 110
5.2.4 度量值的輸出 111
5.3 部署Spring Boot應(yīng)用程序 112
5.3.1 可執(zhí)行Jar及其原理 112
5.3.2 構(gòu)建啟動(dòng)代碼 115
茶歇時(shí)間:如何優(yōu)雅地關(guān)閉系統(tǒng) 117
5.3.3 啟動(dòng)后的一次性執(zhí)行邏輯 118
茶歇時(shí)間:通過(guò)Lombok簡(jiǎn)化代碼 121
5.4 小結(jié) 122
第二部分 Spring中的數(shù)據(jù)操作
第6章 Spring中的JDBC 124
6.1 配置數(shù)據(jù)源 124
6.1.1 數(shù)據(jù)庫(kù)連接池 124
茶歇時(shí)間:HikariCP為什么說(shuō)自己比別人快 127
6.1.2 數(shù)據(jù)源配置詳解 128
茶歇時(shí)間:使用Docker簡(jiǎn)化本地開(kāi)發(fā)環(huán)境的準(zhǔn)備工作 133
6.2 使用JDBC操作數(shù)據(jù)庫(kù) 134
6.2.1 查詢類操作 135
6.2.2 變更類操作 139
6.2.3 批處理操作 141
6.2.4 自動(dòng)配置說(shuō)明 143
6.3 事務(wù)管理 143
6.3.1 Spring Framework的事務(wù)抽象 144
6.3.2 Spring事務(wù)的基本配置 146
6.3.3 聲明式事務(wù) 148
茶歇時(shí)間:通常事務(wù)加在哪層比較合適 151
茶歇時(shí)間:聲明式事務(wù)背后的原理 153
6.3.4 編程式事務(wù) 154
6.4 異常處理 155
6.4.1 統(tǒng)一的異常抽象 155
6.4.2 自定義錯(cuò)誤碼處理邏輯 157
6.5 小結(jié) 158
第7章 對(duì)象關(guān)系映射 160
7.1 通過(guò)Hibernate操作數(shù)據(jù)庫(kù) 160
7.1.1 Hibernate與JPA 160
7.1.2 定義實(shí)體對(duì)象 162
茶歇時(shí)間:為什么一定要用Money類來(lái)表示金額 165
茶歇時(shí)間:OpenSessionInView問(wèn)題 168
7.1.3 通過(guò)Hibernate API操作數(shù)據(jù)庫(kù) 169
7.1.4 通過(guò)Spring Data的Repository操作數(shù)據(jù)庫(kù) 173
茶歇時(shí)間:JpaRepository背后的原理 178
7.2 通過(guò)MyBatis操作數(shù)據(jù)庫(kù) 179
7.2.1 定義MyBatis映射 180
7.2.2 在Spring中配置并使用MyBatis 184
7.2.3 提升MyBatis的開(kāi)發(fā)效率 187
7.3 小結(jié) 193
第8章 數(shù)據(jù)訪問(wèn)進(jìn)階 194
8.1 連接池的實(shí)用配置 194
8.1.1 保護(hù)敏感的連接配置 194
8.1.2 記錄SQL語(yǔ)句執(zhí)行情況 197
8.1.3 Druid的Filter擴(kuò)展 200
8.2 在Spring工程中訪問(wèn)Redis 202
8.2.1 配置Redis連接 202
茶歇時(shí)間:Redis的幾種部署模式 204
8.2.2 Redis的基本操作 206
茶歇時(shí)間:本地緩存 vs. 分布式緩存 212
8.2.3 通過(guò)Repository操作Redis 212
茶歇時(shí)間:多種不同的Repository如何共存 216
8.3 Spring的緩存抽象 217
8.3.1 基于注解的方法緩存 217
8.3.2 替換不同的緩存實(shí)現(xiàn) 221
8.4 小結(jié) 224
第三部分 使用Spring開(kāi)發(fā)Web應(yīng)用
第9章 Spring MVC實(shí)踐 226
9.1 簡(jiǎn)單上手Spring MVC 226
9.1.1 Spring MVC概覽 226
9.1.2 編寫(xiě)一個(gè)簡(jiǎn)單的控制器 227
9.2 Spring MVC的請(qǐng)求處理邏輯 234
9.2.1 請(qǐng)求的處理流程 234
茶歇時(shí)間:Servlet的基礎(chǔ)知識(shí) 240
9.2.2 請(qǐng)求處理方法 241
茶歇時(shí)間:請(qǐng)求處理過(guò)程中遇到的幾個(gè)作用范圍 243
茶歇時(shí)間:Spring Boot自動(dòng)配置
預(yù)埋的擴(kuò)展點(diǎn) 245
9.3 Spring MVC的視圖機(jī)制 252
9.3.1 視圖解析 252
9.3.2 常用視圖類型 253
9.3.3 靜態(tài)資源與緩存 260
茶歇時(shí)間:時(shí)間 vs. 空間 263
9.4 訪問(wèn)Web資源 264
9.4.1 通過(guò)RestTemplate訪問(wèn)Web資源 264
9.4.2 RestTemplate的進(jìn)階用法 270
茶歇時(shí)間:模板設(shè)計(jì)模式 275
9.4.3 簡(jiǎn)單定制RestTemplate 275
茶歇時(shí)間:HttpComponents的Keep-Alive默認(rèn)策略優(yōu)化 277
9.5 小結(jié) 278
第 10章 保護(hù)Web安全 279
10.1 認(rèn)識(shí)Spring Security 279
10.1.1 模塊介紹 280
10.1.2 工作原理 280
10.2 身份認(rèn)證 282
10.2.1 Spring Security的身份認(rèn)證機(jī)制 282
10.2.2 基于用戶名和密碼的身份認(rèn)證 283
茶歇時(shí)間:使用Spring Security加密保存密碼 284
10.2.3 實(shí)現(xiàn)“記住我”功能 294
10.2.4 自定義認(rèn)證方式 298
10.3 訪問(wèn)授權(quán) 303
10.3.1 訪問(wèn)授權(quán)的判斷方式 303
10.3.2 基本的權(quán)限配置 304
10.3.3 面向方法的訪問(wèn)授權(quán) 308
茶歇時(shí)間:如何忽略權(quán)限校驗(yàn) 310
10.4 常見(jiàn)Web攻擊防護(hù) 311
10.4.1 跨站請(qǐng)求偽造攻擊防護(hù) 311
10.4.2 會(huì)話固定攻擊防護(hù) 316
10.4.3 跨站腳本攻擊防護(hù) 316
10.4.4 點(diǎn)擊劫持攻擊防護(hù) 317
10.4.5 引導(dǎo)使用HTTPS 317
10.5 客戶端程序的認(rèn)證 319
10.5.1 幾種常見(jiàn)的認(rèn)證方式 319
10.5.2 用RestTemplate實(shí)現(xiàn)簡(jiǎn)單的認(rèn)證 320
10.6 小結(jié) 323
第 11章 Web開(kāi)發(fā)進(jìn)階 325
11.1 在Spring MVC中實(shí)現(xiàn)AOP 325
11.1.1 使用HandlerInterceptor實(shí)現(xiàn)AOP 325
11.1.2 完善異常處理邏輯 329
11.2 調(diào)整Web容器 333
11.2.1 更換內(nèi)嵌Web容器 334
茶歇時(shí)間:不同的Servlet版本與對(duì)應(yīng)的容器 335
11.2.2 調(diào)整內(nèi)嵌Web容器配置 335
茶歇時(shí)間:如何獲得HTTPS證書(shū) 338
11.2.3 支持HTTP/2 341
茶歇時(shí)間:網(wǎng)站提供的HTTPS服務(wù)到底是否安全 345
11.3 支持分布式Session 346
11.3.1 幾種常見(jiàn)的解決方案 346
11.3.2 使用Spring Session實(shí)現(xiàn)分布式Session 348
11.4 響應(yīng)式Web 353
11.4.1 了解Project Reactor 354
11.4.2 使用WebFlux代替WebMVC 359
茶歇時(shí)間:為什么Project Reactor和WebFlux還沒(méi)成為主流 363
11.4.3 通過(guò)WebClient訪問(wèn)Web資源 366
11.5 小結(jié) 371
第四部分 使用Spring開(kāi)發(fā)微服務(wù)
第 12章 微服務(wù)與云原生應(yīng)用 374
12.1 走近微服務(wù) 374
12.1.1 什么是微服務(wù) 374
12.1.2 微服務(wù)的特點(diǎn) 375
12.2 RESTful風(fēng)格的微服務(wù) 377
12.2.1 什么是RESTful風(fēng)格的微服務(wù) 377
12.2.2 設(shè)計(jì)RESTful風(fēng)格的微服務(wù) 379
12.2.3 了解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 383
12.3 理解云原生 385
12.3.1 什么是云原生應(yīng)用 385
12.3.2 十二要素應(yīng)用 386
12.3.3 Spring Cloud概述 390
12.4 小結(jié) 391
第 13章 服務(wù)注冊(cè)與發(fā)現(xiàn) 392
13.1 常見(jiàn)的負(fù)載均衡方案 392
13.1.1 集中式方案 392
13.1.2 分布式方案 395
13.2 使用Spring Cloud實(shí)現(xiàn)負(fù)載均衡 396
13.2.1 在Zookeeper中注冊(cè)服務(wù) 396
茶歇時(shí)間:為什么Zookeeper不適合做服務(wù)注冊(cè)中心 398
13.2.2 使用Spring Cloud LoadBalancer訪問(wèn)服務(wù) 398
茶歇時(shí)間:@LoadBalanced是如何工作的 399
13.2.3 使用OpenFeign訪問(wèn)服務(wù) 400
13.3 服務(wù)注冊(cè)與發(fā)現(xiàn)的抽象與應(yīng)用 405
13.3.1 服務(wù)注冊(cè)的抽象 405
13.3.2 服務(wù)發(fā)現(xiàn)的抽象 406
13.3.3 在Consul中注冊(cè)服務(wù) 406
13.3.4 在Nacos中注冊(cè)服務(wù) 408
茶歇時(shí)間:Spring Cloud Alibaba概述 411
13.3.5 在Eureka中注冊(cè)服務(wù) 411
13.4 小結(jié) 414
第 14章 服務(wù)配置管理 415
14.1 使用Spring Cloud Config實(shí)現(xiàn)配置管理 415
14.1.1 為何需要配置中心 415
14.1.2 基于Spring Cloud Config Server的配置中心 416
茶歇時(shí)間:加解密繞不開(kāi)的JCE 423
14.1.3 通過(guò)Spring Cloud Config Client訪問(wèn)配置 423
14.2 服務(wù)配置的實(shí)現(xiàn)原理與應(yīng)用 426
14.2.1 服務(wù)配置的實(shí)現(xiàn)原理 426
14.2.2 基于Zookeeper的配置中心 429
14.2.3 基于Consul的配置中心 431
14.2.4 基于Alibaba Nacos的配置中心 433
14.3 小結(jié) 436
第 15章 服務(wù)容錯(cuò)保護(hù) 437
15.1 常見(jiàn)的服務(wù)容錯(cuò)模式 437
15.1.1 幾種常見(jiàn)的容錯(cuò)模式 437
15.1.2 通過(guò)AOP實(shí)現(xiàn)簡(jiǎn)單的容錯(cuò) 440
15.2 使用Resilience4j實(shí)現(xiàn)容錯(cuò) 447
15.2.1 使用Resilience4j實(shí)現(xiàn)限流 447
15.2.2 使用Resilience4j實(shí)現(xiàn)斷路 453
15.2.3 使用Resilience4j實(shí)現(xiàn)隔離 457
15.2.4 resilience4j-spring-boot2的特別說(shuō)明 461
15.3 使用Spring Cloud CircuitBreaker實(shí)現(xiàn)容錯(cuò) 462
15.3.1 通過(guò)Spring Cloud CircuitBreaker使用Resilience4j 463
15.3.2 通過(guò)Spring Cloud CircuitBreaker使用Sentinel 466
15.4 小結(jié) 476
第 16章 服務(wù)集成 477
16.1 使用Dubbo進(jìn)行RPC通信 477
16.1.1 Dubbo概述 477
16.1.2 Dubbo的基礎(chǔ)用法 479
茶歇時(shí)間:多個(gè)copyProperties()該如何選擇 482
茶歇時(shí)間:為什么對(duì)外的接口里不要用枚舉 484
16.2 使用消息中間件進(jìn)行異步通信 488
16.2.1 為什么要使用基于消息的異步通信 488
茶歇時(shí)間:常見(jiàn)的消息模型 489
16.2.2 通過(guò)Spring AMQP使用RabbitMQ 489
16.2.3 通過(guò)Spring Cloud Stream使用Kafka 495
茶歇時(shí)間:用Docker Compose在本地啟動(dòng)一套Kafka 501
16.3 服務(wù)鏈路追蹤 502
16.3.1 鏈路追蹤概述 503
16.3.2 基于Spring Cloud Sleuth實(shí)現(xiàn)鏈路追蹤 505
茶歇時(shí)間:OpenTelemetry概述 509
16.4 基于Spring Cloud Gateway實(shí)現(xiàn)微服務(wù)網(wǎng)關(guān) 510
16.4.1 什么是微服務(wù)網(wǎng)關(guān) 510
16.4.2 Spring Cloud Gateway的路由配置 512
16.5 小結(jié) 522
第五部分 附錄
附錄A 從Spring Boot 2.x升級(jí)到3.0 526
A.1 升級(jí)判斷標(biāo)準(zhǔn) 526
A.2 升級(jí)操作 526
A.2.1 依賴組件升級(jí) 527
A.2.2 代碼修改 529
附錄B 將應(yīng)用程序打包為Docker鏡像 531
B.1 編寫(xiě)Dockerfile 531
茶歇時(shí)間:如何選擇基礎(chǔ)Java Docker鏡像 532
B.2 構(gòu)建并運(yùn)行鏡像 533
B.3 構(gòu)建分層鏡像 534
B.4 其他打包方式 535
附錄C 通過(guò)Spring Native打包本地鏡像 536
C.1 GraalVM與Spring Native 536
C.1.1 GraalVM簡(jiǎn)介 536
C.1.2 Spring Native簡(jiǎn)介 537
C.2 編譯打包本地鏡像 538
C.2.1 準(zhǔn)備工作 538
C.2.2 調(diào)整編譯打包配置 539
C.2.3 修改代碼 542
C.2.4 其他優(yōu)化 547
后記 549