本書基于Spring框架的核心邏輯,通過實現(xiàn)簡化版Spring框架的方式,對Spring進(jìn)行分析、設(shè)計和實踐。本書以實踐為核心,摒棄Spring源碼中繁雜的內(nèi)容,選擇框架中的核心邏輯,簡化代碼實現(xiàn)過程,保留核心功能,如IOC、AOP、Bean的生命周期、上下文、作用域、資源處理、JDBC、事務(wù)、開發(fā)簡易版ORM框架、將ORM框架整合到Spring框架中等內(nèi)容的方案設(shè)計和源碼實現(xiàn)。在Spring框架功能模塊的開發(fā)過程中,逐步介紹并深入分析其中所涉及的設(shè)計原則和設(shè)計模式,使讀者游刃有余地解決在調(diào)試Spring源碼及開發(fā)SpringBoot Starter組件時遇到的問題。本書既可以作為計算機(jī)相關(guān)行業(yè)研發(fā)人員的輔導(dǎo)書,也可以作為高等院校計算機(jī)專業(yè)學(xué)生的參考書。無論是初學(xué)者,還是中、高級研發(fā)人員,都能從本書中獲得啟發(fā)。
付政委(小傅哥)作為一名一線互聯(lián)網(wǎng)Java工程師、架構(gòu)師,曾開發(fā)過交易、營銷類項目,運營、活動類項目,設(shè)計過中間件,組織過系統(tǒng)重構(gòu),編寫過技術(shù)專利。他不僅從事業(yè)務(wù)系統(tǒng)的開發(fā)工作,也經(jīng)常做一些字節(jié)碼插樁類的設(shè)計和實現(xiàn),對架構(gòu)的設(shè)計和落地具有豐富的經(jīng)驗。他既熱衷于Java語言,也喜歡研究中繼器、I/O板卡、C#和PHP,是一名活躍的技術(shù)“折騰者”。常逛GitHub,樂于分享技術(shù)文章。沉淀、分享、成長,讓自己和他人都能有所收獲!
目錄
引言 /1
第1章 實現(xiàn)一個簡單的Spring Bean容器 / 7
1.1 容器是什么 / 7
1.2 簡單容器設(shè)計 / 8
1.3 簡單容器實現(xiàn) / 9
1.4 容器使用測試 / 12
1.5 本章總結(jié) / 13
第2章 實現(xiàn)Bean對象的定義、注冊和獲取 / 14
2.1 容器的思考 / 14
2.2 完善容器設(shè)計 / 15
2.3 完善容器實現(xiàn) / 16
2.4 Bean 生命周期測試 / 22
2.5 本章總結(jié) / 24
第3章 基于Cglib實現(xiàn)含構(gòu)造函數(shù)的類實例化策略 / 25
3.1 實例化問題 / 25
3.2 實例化策略設(shè)計 / 26
3.3 實例化策略代碼實現(xiàn) / 27
3.4 構(gòu)造函數(shù)對象測試 / 32
3.5 本章總結(jié) / 35
第4章 注入屬性和依賴對象 / 36
4.1 Bean對象拆解思考 / 36
4.2 屬性填充設(shè)計 / 37
4.3 屬性填充實現(xiàn) / 38
4.4 注入屬性測試 / 43
4.5 本章總結(jié) / 46
第5章 資源加載器解析文件注冊對象 / 47
5.1 對象創(chuàng)建問題 / 47
5.2 資源加載和解析設(shè)計 / 48
5.3 資源加載和解析設(shè)計實現(xiàn) / 49
5.4 配置Bean對象注冊測試 / 60
5.5 本章總結(jié) / 64
第6 章 實現(xiàn)應(yīng)用上下文 / 65
6.1 分治Bean 對象功能 / 65
6.2 Bean 對象擴(kuò)展和上下文設(shè)計 / 66
6.3 Bean 對象擴(kuò)展和上下文實現(xiàn) / 68
6.4 應(yīng)用上下文功能測試 / 79
6.5 本章總結(jié) / 83
第7 章 Bean 對象的初始化和銷毀/ 84
7.1 容器管理Bean 功能 / 84
7.2 初始化和銷毀設(shè)計 / 85
7.3 初始化和銷毀實現(xiàn) / 87
7.4 容器功能測試 / 97
7.5 本章總結(jié) / 99
第8 章 感知容器對象 / 101
8.1 Spring Bean 容器的功能 / 101
8.2 感知容器設(shè)計 / 102
8.3 感知容器實現(xiàn) / 103
8.4 Aware 接口的功能測試 / 111
8.5 本章總結(jié) / 114
第9 章 對象作用域和FactoryBean/ 117
9.1 Bean 對象的來源和模式 / 117
9.2 FactoryBean 和對象模式設(shè)計 / 118
9.3 FactoryBean 和對象模式實現(xiàn) / 119
9.4 代理Bean 和對象模式測試 / 128
9.5 本章總結(jié) / 132
第10 章 容器事件和事件監(jiān)聽器 / 134
10.1 運用事件機(jī)制降低耦合度 / 134
10.2 事件觀察者設(shè)計 / 135
10.3 事件觀察者實現(xiàn) / 136
10.4 事件使用測試 / 146
10.5 本章總結(jié) / 148
第11 章 基于JDK、Cglib 實現(xiàn)AOP 切面 / 150
11.1 動態(tài)代理 / 150
11.2 AOP 切面設(shè)計 / 151
11.3 AOP 切面實現(xiàn) / 152
11.4 AOP 切面測試 / 163
11.5 本章總結(jié) / 165
第12 章 把AOP 融入Bean 的生命周期 / 166
12.1 AOP 與框架整合思考 / 166
12.2 AOP 切面設(shè)計 / 167
12.3 AOP 切面實現(xiàn) / 168
12.4 切面使用測試 / 176
12.5 本章總結(jié) / 179
第13 章 自動掃描注冊Bean對象 / 180
13.1 注入對象完善點 / 180
13.2 自動掃描注冊設(shè)計 / 181
13.3 自動掃描注冊實現(xiàn) / 182
13.4 注冊Bean 對象測試 / 190
13.5 本章總結(jié) / 193
第14 章 通過注解注入屬性信息 / 194
14.1 引入注入注解 / 194
14.2 注入屬性信息設(shè)計 / 195
14.3 注入屬性信息實現(xiàn) / 196
14.4 注解使用測試 / 206
14.5 本章總結(jié) / 208
第15 章 給代理對象設(shè)置屬性注入 / 210
15.1 代理對象創(chuàng)建過程問題 / 210
15.2 代理對象屬性填充設(shè)計 / 211
15.3 代理對象屬性填充實現(xiàn) / 212
15.4 代理對象屬性注入測試 / 219
15.5 本章總結(jié) / 221
第16 章 通過三級緩存解決循環(huán)依賴 / 222
16.1 復(fù)雜對象的創(chuàng)建思考 / 222
16.2 循環(huán)依賴設(shè)計 / 223
16.3 循環(huán)依賴實現(xiàn) / 227
16.4 循環(huán)依賴測試 / 234
16.5 本章總結(jié) / 238
第17 章 數(shù)據(jù)類型轉(zhuǎn)換 / 239
17.1 類型轉(zhuǎn)換設(shè)計 / 239
17.2 類型轉(zhuǎn)換實現(xiàn) / 240
17.3 類型轉(zhuǎn)換測試 / 249
17.4 本章總結(jié) / 251
第18 章 JDBC 功能整合 / 252
18.1 JdbcTemplate 說明 / 252
18.2 整合JDBC 服務(wù)設(shè)計 / 253
18.2 整合 JDBC 服務(wù)開發(fā) / 254
18.3 JDBC 功能測試 / 258
18.4 本章總結(jié) / 260
第19 章 事務(wù)處理 / 261
19.1 了解事務(wù) / 261
19.2 事務(wù)功能設(shè)計 / 262
19.3 事務(wù)功能實現(xiàn) / 264
19.4 切面事務(wù)測試 / 272
19.5 本章總結(jié) / 276
第20 章 ORM 框架實現(xiàn) / 278
20.1 簡單ORM 框架設(shè)計 / 278
20.2 簡單ORM 框架實現(xiàn) / 279
20.3 ORM 框架使用測試 / 287
20.4 本章總結(jié) / 290
第21 章 將ORM 框架整合到Spring Bean容器中 / 291
21.1 ORM-Spring 整合設(shè)計 / 291
21.2 ORM-Spring 整合實現(xiàn) / 292
21.3 整合功能驗證 / 299
21.4 本章總結(jié) / 302