《Spring 5核心原理與30個類手寫實戰》深度解析了Spring的核心原理,書中使用很多例子和源碼,方便讀者學習。
基本介紹
- 書名:Spring 5核心原理與30個類手寫實戰
- 作者:譚勇德(Tom) 著
- ISBN:978-7-121-36741-0
- 頁數:560頁
- 定價:118.00元
- 出版社:電子工業出版社
- 出版時間:2019年7月出版
- 開本:16開
內容提要,作者簡介,目錄,第1篇 Spring內功心法,第2篇 Spring環境預熱,第3篇 Spring核心原理,第4篇 Spring手寫實戰,第5篇 Spring數據訪問,第6篇 Spring經驗分享,
內容提要
《Spring 5核心原理與30個類手寫實戰》基於編程開發實踐,從環境準備、頂層結構設計、數據訪問等方面深度解析Spring 5的原理與新特性,一步步地推導出Spring的設計原理。讀者通過本書可以看源碼不再“暈車”,輕鬆找到入口;系統學習設計思想,提高解決問題的效率;培養架構思維能力,以及自驅學習能力。
作者簡介
譚勇德(Tom)10餘年Java開發經驗。現為咕泡學院聯合創始人。在大型IT公司擔任過CTO、系統架構師。作者負責過多個大型分散式系統的微服務架構的技術改造;對Spring框架有深入研究;開發過多套企業內部UI框架和ORM框架。
目錄
第1篇 Spring內功心法
第1章 軟體架構設計原則 2
1.1 開閉原則 2
1.2 依賴倒置原則 4
1.3 單一職責原則 7
1.4 接口隔離原則 10
1.5 迪米特原則 12
1.6 里氏替換原則 14
1.7 合成復用原則 19
1.8 設計原則總結 20
第2章 Spring中常用的設計模式 21
2.1 為什麼要從設計模式開始 21
2.1.1 寫出優雅的代碼 22
2.1.2 更好地重構項目 24
2.1.3 經典框架都在用設計模式解決問題 36
2.2 工廠模式詳解 36
2.2.1 工廠模式的由來 36
2.2.2 簡單工廠模式 37
2.2.3 工廠方法模式 41
2.2.4 抽象工廠模式 43
2.2.5 利用工廠模式重構的實踐案例 47
2.3 單例模式詳解 53
2.3.1 單例模式的套用場景 53
2.3.2 餓漢式單例模式 53
2.3.3 懶漢式單例模式 54
2.3.4 反射破壞單例 60
2.3.5 序列化破壞單例 61
2.3.6 註冊式單例模式 68
2.3.7 執行緒單例實現ThreadLocal 74
2.3.8 單例模式小結 75
2.4 原型模式詳解 75
2.4.1 原型模式的套用場景 75
2.4.2 淺克隆 77
2.4.3 深克隆 79
2.4.4 克隆破壞單例模式 81
2.4.5 clone()方法的源碼 82
2.5 代理模式詳解 82
2.5.1 代理模式的套用場景 82
2.5.2 靜態代理 83
2.5.3 動態代理 88
2.5.4 代理模式與Spring 107
2.5.5 靜態代理和動態代理的本質區別 108
2.5.6 代理模式的優缺點 109
2.6 委派模式詳解 109
2.6.1 委派模式的定義及套用場景 109
2.6.2 委派模式在源碼中的體現 111
2.7 策略模式詳解 114
2.7.1 策略模式的套用場景 114
2.7.2 用策略模式實現選擇支付方式的業務場景 114
2.7.3 策略模式在JDK源碼中的體現 122
2.7.4 策略模式的優缺點 125
2.7.5 委派模式與策略模式綜合套用 125
2.8 模板模式詳解 129
2.8.1 模板模式的套用場景 129
2.8.2 利用模板模式重構JDBC操作業務場景 132
2.8.3 模板模式在源碼中的體現 136
2.8.4 模板模式的優缺點 138
2.9 適配器模式詳解 139
2.9.1 適配器模式的套用場景 139
2.9.2 重構第三方登錄自由適配的業務場景 141
2.9.3 適配器模式在源碼中的體現 149
2.9.4 適配器模式的優缺點 153
2.10 裝飾者模式詳解 153
2.10.1 裝飾者模式的套用場景 153
2.10.2 裝飾者模式和適配器模式對比 163
2.10.3 裝飾者模式在源碼中的套用 163
2.10.4 裝飾者模式的優缺點 165
2.11 觀察者模式詳解 165
2.11.1 觀察者模式的套用場景 165
2.11.2 觀察者模式在源碼中的套用 175
2.11.3 基於Guava API輕鬆落地觀察者模式 176
2.11.4 觀察者模式的優缺點 177
2.12 各設計模式的總結與對比 177
2.12.1 GoF 23種設計模式簡介 177
2.12.2 設計模式之間的關聯關係 178
2.12.3 Spring中常用的設計模式 182
2.13 Spring中的編程思想總結 183
第2篇 Spring環境預熱
第3章 Spring的前世今生 186
3.1 一切從Bean開始 187
3.2 Spring的設計初衷 188
3.3 BOP編程伊始 188
3.4 理解BeanFactory 189
3.5 AOP編程理念 189
第4章 Spring 5系統架構 191
4.1 核心容器 192
4.2 AOP和設備支持 192
4.3 數據訪問與集成 193
4.4 Web組件 194
4.5 通信報文 194
4.6 集成測試 194
4.7 集成兼容 194
4.8 各模組之間的依賴關係 194
第5章 Spring版本命名規則 196
5.1 常見軟體的版本命名 196
5.2 語義化版本命名通行規則 197
5.3 商業軟體中常見的修飾詞 197
5.4 軟體版本號使用限定 198
5.5 Spring版本命名規則 199
第6章 Spring源碼下載及構建技巧 200
6.1 Spring 5源碼下載 200
6.2 基於Gradle的源碼構建技巧 201
6.3 Gradle構建過程中的坑 207
第3篇 Spring核心原理
第7章 用300行代碼手寫提煉Spring核心原理 210
7.1 自定義配置 210
7.1.1 配置application.properties檔案 210
7.1.2 配置web.xml檔案 210
7.1.3 自定義註解 211
7.1.4 配置註解 212
7.2 容器初始化 213
7.2.1 實現1.0版本 213
7.2.2 實現2.0版本 216
7.2.3 實現3.0版本 223
7.3 運行效果演示 227
第8章 一步一步手繪Spring IoC運行時序圖 228
8.1 Spring核心之IoC容器初體驗 228
8.1.1 再談IoC與DI 228
8.1.2 Spring核心容器類圖 229
8.1.3 Web IoC容器初體驗 232
8.2 基於XML的IoC容器的初始化 237
8.2.1 尋找入口 238
8.2.2 獲得配置路徑 238
8.2.3 開始啟動 240
8.2.4 創建容器 242
8.2.5 載入配置路徑 243
8.2.6 分配路徑處理策略 244
8.2.7 解析配置檔案路徑 247
8.2.8 開始讀取配置內容 249
8.2.9 準備文檔對象 250
8.2.10 分配解析策略 251
8.2.11 將配置載入記憶體 252
8.2.12 載入<bean>元素 257
8.2.13 載入<property>元素 261
8.2.14 載入<property>子元素 264
8.2.15 載入<list>子元素 266
8.2.16 分配註冊策略 267
8.2.17 向容器註冊 267
8.3 基於註解的IoC初始化 270
8.3.1 註解的前世今生 270
8.3.2 定位Bean掃描路徑 271
8.3.3 讀取註解的元數據 273
8.3.4 掃描指定包並解析為BeanDefinition 277
8.3.5 註冊註解BeanDefinition 283
8.4 IoC容器初始化小結 285
第9章 一步一步手繪Spring DI運行時序圖 287
9.1 Spring自動裝配之依賴注入 287
9.1.1 依賴注入發生的時間 287
9.1.2 尋找獲取Bean的入口 288
9.1.3 開始實例化 293
9.1.4 選擇Bean實例化策略 297
9.1.5 執行Bean實例化 299
9.1.6 準備依賴注入 301
9.1.7 解析屬性依賴注入規則 306
9.1.8 注入賦值 310
9.2 Spring IoC容器中那些鮮為人知的細節 314
9.2.1 關於延時載入 314
9.2.2 關於FactoryBean和BeanFactory 317
9.2.3 再述autowiring 322
第10章 一步一步手繪Spring AOP運行時序圖 326
10.1 Spring AOP初體驗 326
10.1.1 再述Spring AOP套用場景 326
10.1.2 AOP中必須明白的幾個概念 327
10.1.3 使用Spring AOP的兩種方式 329
10.1.4 切入點表達式的配置規則 333
10.2 Spring AOP源碼分析 334
10.2.1 尋找入口 334
10.2.2 選擇代理策略 338
10.2.3 調用代理方法 341
10.2.4 觸發通知 347
第11章 一步一步手繪Spring MVC運行時序圖 352
11.1 初探Spring MVC請求處理流程 352
11.2 Spring MVC九大組件 353
11.2.1 HandlerMapping 353
11.2.2 HandlerAdapter 353
11.2.3 HandlerExceptionResolver 354
11.2.4 ViewResolver 354
11.2.5 RequestToViewNameTranslator 354
11.2.6 LocaleResolver 354
11.2.7 ThemeResolver 355
11.2.8 MultipartResolver 355
11.2.9 FlashMapManager 355
11.3 Spring MVC源碼分析 355
11.3.1 初始化階段 356
11.3.2 運行調用階段 359
11.4 Spring MVC最佳化建議 367
第4篇 Spring手寫實戰
第12章 環境準備 370
12.1 IDEA集成Lombok外掛程式 370
12.1.1 安裝外掛程式 370
12.1.2 配置註解處理器 373
12.1.3 使用外掛程式 374
12.2 從Servlet到ApplicationContext 375
12.3 準備基礎配置 376
12.3.1 application.properties配置 377
12.3.2 pom.xml配置 377
12.3.3 web.xml配置 378
12.3.4 GPDispatcherServlet 378
第13章 IoC頂層結構設計 380
13.1 Annotation(自定義配置)模組 380
13.1.1 @GPService 380
13.1.2 @GPAutowired 381
13.1.3 @GPController 381
13.1.4 @GPRequestMapping 382
13.1.5 @GPRequestParam 382
13.2 core(頂層接口)模組 382
13.2.1 GPFactoryBean 382
13.2.2 GPBeanFactory 383
13.3 beans(配置封裝)模組 383
13.3.1 GPBeanDefinition 383
13.3.2 GPBeanWrapper 384
13.4 context(IoC容器)模組 385
13.4.1 GPAbstractApplicationContext 385
13.4.2 GPDefaultListableBeanFactory 385
13.4.3 GPApplicationContext 385
13.4.4 GPBeanDefinitionReader 388
13.4.5 GPApplicationContextAware 391
第14章 完成DI模組的功能 392
14.1 從getBean()方法開始 393
14.2 GPBeanPostProcessor 395
第15章 完成MVC模組的功能 396
15.1 MVC頂層設計 396
15.1.1 GPDispatcherServlet 396
15.1.2 GPHandlerMapping 402
15.1.3 GPHandlerAdapter 403
15.1.4 GPModelAndView 406
15.1.5 GPViewResolver 406
15.1.6 GPView 407
15.2 業務代碼實現 409
15.2.1 IQueryService 409
15.2.2 QueryService 410
15.2.3 IModifyService 410
15.2.4 ModifyService 411
15.2.5 MyAction 412
15.2.6 PageAction 413
15.3 定製模板頁面 414
15.3.1 first.html 414
15.3.2 404.html 414
15.3.3 500.html 415
15.4 運行效果演示 415
第16章 完成AOP代碼織入 417
16.1 基礎配置 417
16.2 完成AOP頂層設計 418
16.2.1 GPJoinPoint 418
16.2.2 GPMethodInterceptor 419
16.2.3 GPAopConfig 419
16.2.4 GPAdvisedSupport 420
16.2.5 GPAopProxy 422
16.2.6 GPCglibAopProxy 423
16.2.7 GPJdkDynamicAopProxy 423
16.2.8 GPMethodInvocation 425
16.3 設計AOP基礎實現 427
16.3.1 GPAdvice 427
16.3.2 GPAbstractAspectJAdvice 427
16.3.3 GPMethodBeforeAdvice 428
16.3.4 GPAfterReturningAdvice 429
16.3.5 GPAfterThrowingAdvice 430
16.3.6 接入getBean()方法 430
16.4 織入業務代碼 432
16.4.1 LogAspect 432
16.4.2 IModifyService 433
16.4.3 ModifyService 434
16.5 運行效果演示 435
第5篇 Spring數據訪問
第17章 資料庫事務原理詳解 438
17.1 從Spring事務配置說起 438
17.2 事務的基本概念 439
17.3 事務的基本原理 439
17.4 Spring事務的傳播屬性 440
17.5 資料庫事務隔離級別 441
17.6 Spring中的事務隔離級別 441
17.7 事務的嵌套 442
17.8 Spring事務API架構圖 444
17.9 淺談分散式事務 444
第18章 Spring JDBC源碼初探 446
18.1 異常處理 447
18.2 config模組 448
18.3 core模組 450
18.4 DataSource 456
18.5 object模組 457
18.6 JdbcTemplate 458
18.7 NamedParameterJdbcTemplate 458
第19章 基於Spring JDBC手寫ORM框架 459
19.1 實現思路概述 459
19.1.1 從ResultSet說起 459
19.1.2 為什麼需要ORM框架 464
19.2 搭建基礎架構 467
19.2.1 Page 467
19.2.2 ResultMsg 470
19.2.3 BaseDao 471
19.2.4 QueryRule 473
19.2.5 Order 479
19.3 基於Spring JDBC實現關鍵功能 480
19.3.1 ClassMappings 480
19.3.2 EntityOperation 483
19.3.3 QueryRuleSqlBuilder 488
19.3.4 BaseDaoSupport 498
19.4 動態數據源切換的底層原理 507
19.4.1 DynamicDataSource 508
19.4.2 DynamicDataSourceEntry 509
19.5 運行效果演示 510
19.5.1 創建Member實體類 510
19.5.2 創建Order實體類 511
19.5.3 創建MemberDao 512
19.5.4 創建OrderDao 512
19.5.5 修改db.properties檔案 514
19.5.6 修改application-db.xml檔案 515
19.5.7 編寫測試用例 516
第6篇 Spring經驗分享
第20章 Spring 5新特性總結 520
20.1 升級到Java SE 8和Java EE 7 520
20.2 反應式編程模型 521
20.3 使用註解進行編程 521
20.4 函式式編程 522
20.5 使用 REST 端點執行反應式編程 523
20.6 支持HTTP/2 523
20.7 Kotlin和Spring WebFlux 523
20.8 使用Lambda表達式註冊Bean 524
20.9 Spring Web MVC 支持最新的 API 524
20.10 使用JUnit 5執行條件和並發測試 525
20.11 包清理和棄用 526
20.12 Spring核心和容器的一般更新 526
20.13 我如何看Spring 5 527
第21章 關於Spring的經典高頻面試題 528
21.1 什麼是Spring框架,Spring框架有哪些主要模組 528
21.2 使用Spring框架能帶來哪些好處 528
21.3 什麼是控制反轉(IoC),什麼是依賴注入 529
21.4 在Java中依賴注入有哪些方式 529
21.5 BeanFactory和ApplicationContext有什麼區別 530
21.6 Spring提供幾種配置方式來設定元數據 530
21.7 如何使用XML配置方式配置Spring 531
21.8 Spring提供哪些配置形式 532
21.9 怎樣用註解的方式配置Spring 533
21.10 請解釋Spring Bean的生命周期 534
21.11 Spring Bean作用域的區別是什麼 535
21.12 什麼是Spring Inner Bean 535
21.13 Spring中的單例Bean是執行緒安全的嗎 536
21.14 請舉例說明如何在Spring中注入一個Java集合 536
21.15 如何向Spring Bean中注入java.util.Properties 537
21.16 請解釋Spring Bean的自動裝配 538
21.17 自動裝配有哪些局限性 538
21.18 請解釋各種自動裝配模式的區別 539
21.19 請舉例解釋@Required註解 539
21.20 請舉例說明@Qualifier註解 540
21.21 構造方法注入和設值注入有什麼區別 540
21.22 Spring中有哪些不同類型的事件 541
21.23 FileSystemResource和ClassPathResource有什麼區別 542
21.24 Spring中用到了哪些設計模式 542
21.25 在Spring中如何更有效地使用JDBC 543
21.26 請解釋Spring中的IoC容器 543
21.27 在Spring中可以注入null或空字元串嗎 543