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