學透 Spring:從入門到項目實戰

丁雪豐

  • 出版商: 人民郵電
  • 出版日期: 2023-02-01
  • 售價: $959
  • 貴賓價: 9.5$911
  • 語言: 簡體中文
  • 頁數: 568
  • ISBN: 711560911X
  • ISBN-13: 9787115609113
  • 相關分類: Java 程式語言Java 相關技術
  • 立即出貨 (庫存 < 3)

  • 學透 Spring:從入門到項目實戰-preview-1
  • 學透 Spring:從入門到項目實戰-preview-2
學透 Spring:從入門到項目實戰-preview-1

買這商品的人也買了...

商品描述

本書的目標是讓大家又快又好地打包學透 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