Spring Boot 源碼解讀與原理分析

LinkedBear

  • 出版商: 人民郵電
  • 出版日期: 2023-02-01
  • 售價: $779
  • 貴賓價: 9.5$740
  • 語言: 簡體中文
  • 頁數: 436
  • ISBN: 7115601372
  • ISBN-13: 9787115601377
  • 相關分類: Java 相關技術
  • 立即出貨 (庫存 < 3)

  • Spring Boot 源碼解讀與原理分析-preview-1
  • Spring Boot 源碼解讀與原理分析-preview-2
Spring Boot 源碼解讀與原理分析-preview-1

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

商品描述

Spring Boot是目前Java EE開發中頗受歡迎的框架之一。依托於底層Spring Framework的基礎支撐,以及完善強大的特性設計,Spring Boot已成為業界流行的應用和微服務開發基礎框架。

《Spring Boot源碼解讀與原理分析》共14章,分為4個部分。第一部分介紹Spring Boot底層依賴的核心容器,以及底層Spring Framework的兩大核心特性IOC和AOP;第二部分從底層源碼角度深入剖析Spring Boot的生命周期,包括Spring Application、IOC容器、嵌入式Web容器和AOP模塊的生命周期;第三部分針對項目開發中整合的主流場景,介紹場景模塊中的核心裝配和關鍵機制原理,如JDBC中的事務、Web中的核心控制器等;第四部分與Spring Boot的運行部署相關,針對不同運行場景講解Spring Boot的啟動引導方式。

閱讀《Spring Boot源碼解讀與原理分析》之前,讀者需要先對Spring Framework和Spring Boot有基本的理解與簡單的框架使用經驗或項目開發經驗。本書的重點是Spring Boot的設計、思想和原理,無論是對於已經有一定基礎的開發者還是已熟練使用Spring Boot並希望進一步提升技能和水平的開發者,本書是他們透徹研究Spring Boot源碼和原理的理想選擇。

作者簡介

LinkedBear,Java开发工程师、底层技术研究者与分享者,倾心研究Spring技术体系多年,对Spring、Spring Boot等框架有独到的见解,拥有丰富的框架体系实践经验和架构封装经验。

目錄大綱

第 1部分 Spring Boot底層依賴的核心容器

 

第 1章 Spring Boot整體概述 3

1.1 Spring Framework 3

1.1.1 Spring Framework的歷史 4

1.1.2 IOC與AOP 4

1.2 Spring Boot與Spring Framework 4

1.3 Spring Boot的核心特性 5

1.4 Spring Boot的體系 5

1.5 開發第 一個Spring Boot應用 6

1.5.1 創建項目 6

1.5.2 編寫簡單代碼 10

1.6 小結 11

第 2章 Spring Boot的自動裝配 12

2.1 組件裝配 12

2.1.1 組件 12

2.1.2 手動裝配 13

2.1.3 自動裝配 13

2.2 Spring Framework的模塊裝配 14

2.2.1 模塊 14

2.2.2 快速體會模塊裝配 15

2.2.3 導入配置類 17

2.2.4 導入ImportSelector 19

2.2.5 導入ImportBeanDefinitionRegistrar 21

2.2.6 擴展:DeferredImportSelector 22

2.3 Spring Framework的條件裝配 24

2.3.1 基於Profile的裝配 24

2.3.2 基於Conditional的裝配 26

2.4 SPI機制 28

2.4.1 JDK原生的SPI 29

2.4.2 Spring Framework 3.2的SPI 30

2.5 Spring Boot的裝配機制 32

2.5.1 @ComponentScan 33

2.5.2 @SpringBootConfiguration 34

2.5.3 @EnableAutoConfiguration 35

2.6 WebMvc場景下的自動裝配原理 42

2.6.1 Servlet容器的裝配 43

2.6.2 DispatcherServlet的裝配 46

2.6.3 SpringWebMvc的裝配 48

2.7 小結 53

第3章 Spring Boot的IOC容器 54

3.1 Spring Framework的IOC容器 54

3.1.1 BeanFactory 55

3.1.2 ApplicationContext 66

3.1.3 選擇ApplicationContext而不是BeanFactory 74

3.2 Spring Boot對IOC容器的擴展 75

3.2.1 WebServerApplicationContext 75

3.2.2 AnnotationConfigServletWebServerApplicationContext 75

3.2.3 ReactiveWebApplicationContext 76

3.3 選用註解驅動IOC容器的原因 76

3.3.1 配置方式的對比 76

3.3.2 約定大於配置下的選擇 77

3.4 Environment 77

3.4.1 Environment概述 77

3.4.2 Environment的結構與設計 78

3.4.3 Environment與IOC容器的關系 80

3.5 BeanDefinition 81

3.5.1 理解元信息 81

3.5.2 BeanDefinition概述 81

3.5.3 BeanDefinition的結構與設計 82

3.5.4 體會BeanDefinition 85

3.5.5 BeanDefinitionRegistry 88

3.5.6 設計BeanDefinition的意義 89

3.6 後置處理器 89

3.6.1 理解後置處理器 89

3.6.2 BeanPostProcessor 90

3.6.3 BeanPostProcessor的擴展 91

3.6.4 BeanFactoryPostProcessor 93

3.6.5 BeanDefinitionRegistryPostProcessor 94

3.6.6 後置處理器對比 95

3.7 IOC容器的啟動流程 95

3.8 小結 100

第4章 Spring Boot的核心引導:SpringApplication 101

4.1 總體設計 101

4.1.1 啟動失敗的錯誤報告 101

4.1.2 Bean的延遲初始化 103

4.1.3 SpringApplication的定製 103

4.1.4 Web類型推斷 104

4.1.5 監聽與回調 104

4.1.6 應用退出 106

4.2 生命周期概述 107

4.2.1 創建SpringApplication 107

4.2.2 啟動SpringApplication 107

4.2.3 應用退出 108

4.3 小結 108

第5章 Spring Boot的AOP支持 109

5.1 Spring Framework的AOP回顧 109

5.1.1 AOP術語 109

5.1.2 通知類型 110

5.2 Spring Boot使用AOP 110

5.3 AOP的開關:@EnableAspectJAutoProxy 111

5.3.1 AspectJAutoProxyRegistrar 112

5.3.2 AnnotationAwareAspectJAutoProxyCreator 114

5.4 小結 117

 

第 2部分 Spring Boot的生命周期原理分析

 

 

第6章 Spring Boot準備容器與環境 121

6.1 創建SpringApplication 122

6.1.1 推斷Web環境 122

6.1.2 設置初始化器 123

6.1.3 設置監聽器 125

6.1.4 確定主啟動類 126

6.1.5 與Spring Boot 1.x的區別 127

6.1.6 與Spring Boot 2.4.x的區別 128

6.2 啟動SpringApplication 129

6.2.1 前置準備 130

6.2.2 獲取SpringApplicationRunListeners 133

6.2.3 準備運行時環境 135

6.3 IOC容器的創建與初始化 137

6.3.1 打印Banner 137

6.3.2 創建IOC容器 140

6.3.3 初始化IOC容器 142

6.3.4 刷新IOC容器 145

6.3.5 Spring Boot 2.4.x的新特性 145

6.4 IOC容器刷新後的回調 148

6.5 小結 149

第7章 IOC容器的刷新 150

7.1 初始化前的預處理 152

7.1.1 初始化屬性配置 152

7.1.2 初始化早期事件的集合 154

7.2 obtainFreshBeanFactory:初始化BeanFactory 154

7.2.1 註解驅動的refreshBeanFactory 155

7.2.2 XML驅動的refreshBeanFactory 155

7.3 prepareBeanFactory:BeanFactory的預處理動作 156

7.3.1 ApplicationContextAwareProcessor 157

7.3.2 自動註入的支持 158

7.3.3 ApplicationListenerDetector 159

7.4 postProcessBeanFactory:BeanFactory的後置處理 160

7.4.1 回調父類方法 161

7.4.2 組件掃描&解析手動傳入的配置類 164

7.5 invokeBeanFactoryPostProcessors:執行BeanFactoryPostProcessor 164

7.5.1 現有的後置處理器分類 165

7.5.2 執行最高優先級的BeanDefinitionRegistryPostProcessor 165

7.5.3 執行其他BeanDefinitionRegistryPostProcessor 166

7.5.4 回調postProcessBeanFactory方法 167

7.5.5 BeanFactoryPostProcessor的分類 168

7.5.6 執行BeanFactoryPostProcessor 168

7.5.7 重要的後置處理器:ConfigurationClassPostProcessor 169

7.6 registerBeanPostProcessors:初始化BeanPostProcessor 185

7.6.1 BeanPostProcessorChecker 186

7.6.2 MergedBeanDefinitionPostProcessor被重復註冊 187

7.6.3 PriorityOrdered類型的後置處理器 188

7.7 initMessageSource:初始化國際化組件 188

7.8 initApplicationEventMulticaster:初始化事件廣播器 190

7.9 onRefresh:子類擴展的刷新動作 191

7.10 registerListeners:註冊監聽器 191

7.11 finishBeanFactoryInitialization:初始化剩餘的單例bean對象 192

7.11.1 beanFactory.preInstantiateSingletons 193

7.11.2 getBean 193

7.11.3 createBean 199

7.11.4 doCreateBean 201

7.11.5 SmartInitializingSingleton 215

7.12 finishRefresh-刷新後的動作 216

7.12.1 LifecycleProcessor 216

7.12.2 getLifecycleProcessor().onRefresh() 217

7.13 resetCommonCaches:清除緩存 217

7.14 ApplicationContext初始化中的擴展點 218

7.14.1 invokeBeanFactoryPostProcessors 218

7.14.2 finishBeanFactoryInitialization 219

7.15 循環依賴的解決方案 221

7.15.1 循環依賴的產生 221

7.15.2 循環依賴的解決模型 222

7.15.3 基於setter/@Autowired的循環依賴 222

7.15.4 基於構造方法的循環依賴 230

7.15.5 基於原型Bean的循環依賴 230

7.15.6 引入AOP的額外設計 231

7.16 小結 232

第8章 Spring Boot容器刷新擴展:嵌入式Web容器 233

8.1 嵌入式Tomcat簡介 233

8.1.1 嵌入式Tomcat與普通Tomcat 234

8.1.2 Tomcat整體架構 234

8.1.3 Tomcat的核心工作流程 235

8.2 Spring Boot中嵌入式容器的模型 236

8.2.1 WebServer 236

8.2.2 WebServerFactory 236

8.2.3 ServletWebServerFactory和ReactiveWebServerFactory 237

8.2.4 ConfigurableServletWebServerFactory 237

8.3 嵌入式Web容器的初始化時機 237

8.3.1 創建WebServer 238

8.3.2 Web容器關閉相關的回調 241

8.4 嵌入式Tomcat的初始化 242

8.4.1 獲取Context 243

8.4.2 阻止Connector初始化 244

8.4.3 啟動Tomcat 244

8.4.4 阻止Tomcat結束 246

8.5 嵌入式Tomcat的啟動 248

8.6 小結 249

第9章 AOP模塊的生命周期 250

9.1 @EnableAspectJAutoProxy 250

9.2 AnnotationAwareAspectJAutoProxyCreator 252

9.2.1 類繼承結構 253

9.2.2 初始化時機 253

9.2.3 作用時機 254

9.3 Advisor與切麵類的收集 257

9.3.1 收集增強器的邏輯 257

9.3.2 收集原生增強器 258

9.3.3 解析AspectJ切麵封裝增強器 259

9.4 TargetSource的設計 266

9.4.1 TargetSource的設計 267

9.4.2 TargetSource的好處 267

9.4.3 TargetSource的結構 267

9.4.4 Spring Framework中提供的TargetSource 268

9.5 代理對象生成的核心:wrapIfNecessary 268

9.5.1 getAdvicesAndAdvisorsForBean 269

9.5.2 createProxy 274

9.6 代理對象的底層執行邏輯 277

9.6.1 DemoService#save 277

9.6.2 獲取增強器鏈 278

9.6.3 執行增強器 281

9.6.4 jdk動態代理的執行底層 285

9.6.5 AspectJ中通知的底層實現 287

9.7 AOP通知的執行順序對比 289

9.7.1 測試代碼編寫 289

9.7.2 Spring Framework 5.x的順序 290

9.7.3 Spring Framework 4.x的順序 291

9.8 小結 292

 

第3部分 Spring Boot整合常用開發場景

 

 

第 10章 Spring Boot整合JDBC 295

10.1 Spring Boot整合JDBC項目搭建 295

10.1.1 初始化數據庫 295

10.1.2 整合項目 296

10.1.3 編寫測試代碼 296

10.2 整合JDBC後的自動裝配 297

10.2.1 配置數據源 298

10.2.2 創建JdbcTemplate 302

10.2.3 配置事務管理器 303

10.3 聲明式事務的生效原理 303

10.3.1 TransactionAutoConfiguration 303

10.3.2 TransactionManagementConfigurationSelector 305

10.3.3 AutoProxyRegistrar 305

10.3.4 ProxyTransactionManagementConfiguration 307

10.4 聲明式事務的控制全流程 309

10.4.1 CglibAopProxy#intercept 309

10.4.2 TransactionInterceptor 310

10.5 聲明式事務的傳播行為控制 319

10.5.1 修改測試代碼 320

10.5.2 PROPAGATION_REQUIRED 321

10.5.3 PROPAGATION_REQUIRES_NEW 327

10.6 小結 330

第 11章 Spring Boot整合MyBatis 332

11.1 MyBatis框架概述 332

11.2 Spring Boot整合MyBatis項目搭建 333

11.3 自動裝配核心 334

11.3.1 場景啟動器的秘密 334

11.3.2 MybatisLanguageDriverAutoConfiguration 335

11.3.3 MybatisAutoConfiguration 335

11.4 小結 342

第 12章 Spring Boot整合WebMvc 343

12.1 整合WebMvc的核心自動裝配 343

12.2 WebMvc的核心組件 344

12.2.1 DispatcherServlet 344

12.2.2 Handler 345

12.2.3 HandlerMapping 345

12.2.4 HandlerAdapter 347

12.2.5 ViewResolver 348

12.3 @Controller控制器裝配原理 349

12.3.1 初始化RequestMapping的入口 349

12.3.2 processCandidateBean 350

12.3.3 detectHandlerMethods 350

12.4 DispatcherServlet的工作全流程解析 352

12.4.1 DispatcherServlet#service 352

12.4.2 processRequest 353

12.4.3 doService 354

12.4.4 doDispatch 356

12.4.5 DispatcherServlet工作全流程小結 372

12.5 小結 372

第 13章 Spring Boot整合WebFlux 374

13.1 快速瞭解響應式編程與Reactor 374

13.1.1 命令式與響應式 374

13.1.2 概念和思想的回顧與引入 375

13.1.3 快速體會Reactor框架 377

13.2 快速使用WebFlux 380

13.2.1 WebMvc的開發風格 380

13.2.2 逐步過渡到WebFlux 381

13.2.3 WebFlux的函數式開發 382

13.2.4 WebMvc與WebFlux的對比 383

13.3 WebFlux的自動裝配 384

13.3.1 ReactiveWebServerFactoryAutoConfiguration 384

13.3.2 WebFluxAutoConfiguration 385

13.3.3 WebFluxConfig 386

13.3.4 EnableWebFluxConfiguration 387

13.3.5 WebFluxConfigurationSupport 388

13.4 DispatcherHandler的傳統方式工作原理 390

13.4.1 handle方法概覽 390

13.4.2 篩選HandlerMapping 391

13.4.3 搜尋HandlerAdapter並執行 393

13.4.4 返回值處理 394

13.4.5 工作流程小結 395

13.5 DispatcherHandler的函數式端點工作原理 396

13.5.1 HandlerMapping的不同 396

13.5.2 HandlerAdapter的不同 397

13.5.3 返回值處理的不同 398

13.5.4 工作流程小結 399

13.6 小結 399

 

第4部分 運行Spring Boot應用

 

 

第 14章 運行Spring Boot應用 403

14.1 部署打包的兩種方式 403

14.1.1 以可獨立運行jar包的方式 403

14.1.2 以war包的方式 404

14.2 基於jar包的獨立運行機制 405

14.2.1 可運行jar包的前置知識 405

14.2.2 Spring Boot的可運行jar包結構 405

14.2.3 JarLauncher的設計及工作原理 407

14.3 基於war包的外部Web容器運行機制 412

14.3.1 Servlet 3.0規範中引導應用啟動的說明 413

14.3.2 Spring BootServletInitializer的作用和原理 413

14.4 Spring Boot 2.3新特性:優雅停機 415

14.4.1 測試優雅停機場景 416

14.4.2 優雅停機的實現原理 417

14.5 小結 419