本書是《Spring Boot 編程思想》的核心篇,開篇總覽Spring Boot核心特性,接著討論自動(dòng)裝配(Auto-Configuration)與SpringApplication。全書的討論以Spring Boot為中心,議題發(fā)散至Spring技術(shù)棧、JSR及Java。希望透過全局的視角,幫助讀者了解Spring Boot變遷的歷程;經(jīng)過多方的比較,幫助讀者理解Spring Boot特性的原理;整合標(biāo)準(zhǔn)的規(guī)范,幫助讀者掌握Spring Boot設(shè)計(jì)的哲學(xué)。
小馬哥(mercyblitz)是作者馬昕曦的筆名。阿里巴巴技術(shù)專家,從事十余年Java EE 開發(fā),國內(nèi)微服務(wù)技術(shù)講師。目前主要負(fù)責(zé)微服務(wù)技術(shù)推廣、架構(gòu)設(shè)計(jì)、基礎(chǔ)設(shè)施、遷移等。重點(diǎn)關(guān)注云計(jì)算、微服務(wù)以及軟件架構(gòu)等領(lǐng)域。獲得過 SUN Java(SCJP、SCWCD、SCBCD)以及 Oracle OCA 等認(rèn)證。
第1部分 總覽Spring Boot
第1章 初覽Spring Boot 2
1.1 Spring Framework時(shí)代 2
1.2 Spring Boot簡介 3
1.3 Spring Boot的特性 5
1.4 準(zhǔn)備運(yùn)行環(huán)境 5
1.4.1 裝配JDK 8 5
1.4.2 裝配Maven 6
1.4.3 裝配IDE(集成開發(fā)環(huán)境) 8
第2章 理解獨(dú)立的Spring應(yīng)用 9
2.1 創(chuàng)建Spring Boot應(yīng)用 10
2.1.1 命令行方式創(chuàng)建Spring Boot應(yīng)用 11
2.1.2 圖形化界面創(chuàng)建Spring Boot應(yīng)用 21
2.1.3 創(chuàng)建Spring Boot應(yīng)用可執(zhí)行JAR 29
2.2 運(yùn)行Spring Boot應(yīng)用 31
2.2.1 執(zhí)行Spring Boot應(yīng)用可執(zhí)行JAR 32
2.2.2 Spring Boot應(yīng)用可執(zhí)行JAR資源結(jié)構(gòu) 32
2.2.3 FAT JAR和WAR執(zhí)行模塊——spring-boot-loader 36
2.2.4 JarLauncher的實(shí)現(xiàn)原理 40
第3章 理解固化的Maven依賴 58
3.1 spring-boot-starter-parent與spring-boot-dependencies簡介 58
3.2 理解spring-boot-starter-parent與spring-boot- dependencies 61
第4章 理解嵌入式Web容器 70
4.1 嵌入式Servlet Web容器 71
4.1.1 Tomcat作為嵌入式Servlet Web容器 72
4.1.2 Jetty作為嵌入式Servlet Web容器 77
4.1.3 Undertow作為嵌入式Servlet Web容器 80
4.2 嵌入式Reactive Web容器 82
4.2.1 UndertowServletWebServer作為嵌入式Reactive Web容器 82
4.2.2 UndertowWebServer作為嵌入式Reactive Web容器 84
4.2.3 WebServerInitializedEvent 91
4.2.4 Jetty作為嵌入式Reactive Web容器 93
4.2.5 Tomcat作為嵌入式Reactive Web容器 94
第5章 理解自動(dòng)裝配 96
5.1 理解@SpringBootApplication注解語義 97
5.2 @SpringBootApplication屬性別名 103
5.3 @SpringBootApplication標(biāo)注非引導(dǎo)類 107
5.4 @EnableAutoConfiguration激活自動(dòng)裝配 108
5.5 @SpringBootApplication“繼承”@Configuration CGLIB提升特性 110
5.6 理解自動(dòng)配置機(jī)制 112
5.7 創(chuàng)建自動(dòng)配置類 116
第6章 理解Production- Ready特性 119
6.1 理解Production-Ready一般性定義 120
6.2 理解Spring Boot Actuator 123
6.3 Spring Boot Actuator Endpoints 124
6.4 理解“外部化配置” 129
6.5 理解“規(guī)約大于配置” 132
6.6 小馬哥有話說 134
6.6.1 Spring Boot作為微服務(wù)中間件 134
6.6.2 Spring Boot作為Spring Cloud基礎(chǔ)設(shè)施 135
6.7 下一站:走向自動(dòng)裝配 135
第2部分 走向自動(dòng)裝配
第7章 走向注解驅(qū)動(dòng)編程(Annotation-Driven) 138
7.1 注解驅(qū)動(dòng)發(fā)展史 138
7.1.1 注解驅(qū)動(dòng)啟蒙時(shí)代:Spring Framework 1.x 138
7.1.2 注解驅(qū)動(dòng)過渡時(shí)代:Spring Framework 2.x 139
7.1.3 注解驅(qū)動(dòng)黃金時(shí)代:Spring Framework 3.x 142
7.1.4 注解驅(qū)動(dòng)完善時(shí)代:Spring Framework 4.x 146
7.1.5 注解驅(qū)動(dòng)當(dāng)下時(shí)代:Spring Framework 5.x 151
7.2 Spring核心注解場景分類 152
7.3 Spring注解編程模型 154
7.3.1 元注解(Meta-Annotations) 154
7.3.2 Spring模式注解(Stereotype Annotations) 155
7.3.3 Spring組合注解(Composed Annotations) 187
7.3.4 Spring注解屬性別名和覆蓋(Attribute Aliases and Overrides) 195
第8章 Spring注解驅(qū)動(dòng)設(shè)計(jì)模式 225
8.1 Spring @Enable模塊驅(qū)動(dòng) 225
8.1.1 理解@Enable模塊驅(qū)動(dòng) 225
8.1.2 自定義@Enable模塊驅(qū)動(dòng) 226
8.1.3 @Enable模塊驅(qū)動(dòng)原理 236
8.2 Spring Web自動(dòng)裝配 250
8.2.1 理解Web自動(dòng)裝配 250
8.2.2 自定義Web自動(dòng)裝配 254
8.2.3 Web自動(dòng)裝配原理 258
8.3 Spring條件裝配 270
8.3.1 理解配置條件裝配 271
8.3.2 自定義配置條件裝配 274
8.3.3 配置條件裝配原理 277
第9章 Spring Boot自動(dòng)裝配 292
9.1 理解Spring Boot自動(dòng)裝配 295
9.1.1 理解@EnableAutoConfiguration 296
9.1.2 優(yōu)雅地替換自動(dòng)裝配 298
9.1.3 失效自動(dòng)裝配 298
9.2 Spring Boot自動(dòng)裝配原理 299
9.2.1 @EnableAutoConfiguration讀取候選裝配組件 301
9.2.2 @EnableAutoConfiguration排除自動(dòng)裝配組件 305
9.2.3 @EnableAutoConfiguration過濾自動(dòng)裝配組件 307
9.2.4 @EnableAutoConfiguration自動(dòng)裝配事件 313
9.2.5 @EnableAutoConfiguration自動(dòng)裝配生命周期 317
9.2.6 @EnableAutoConfiguration排序自動(dòng)裝配組件 324
9.2.7 @EnableAutoConfiguration自動(dòng)裝配BasePackages 332
9.3 自定義Spring Boot自動(dòng)裝配 337
9.3.1 自動(dòng)裝配Class命名的潛規(guī)則 338
9.3.2 自動(dòng)裝配package命名的潛規(guī)則 338
9.3.3 自定義Spring Boot Starter 340
9.4 Spring Boot條件化自動(dòng)裝配 346
9.4.1 Class條件注解 347
9.4.2 Bean條件注解 358
9.4.3 屬性條件注解 370
9.4.4 Resource條件注解 376
9.4.5 Web應(yīng)用條件注解 391
9.4.6 Spring表達(dá)式條件注解 397
9.5 小馬哥有話說 401
9.6 下一站:理解SpringApplication 402
第3部分 理解SpringApplication
第10章 SpringApplication初始化階段 405
10.1 SpringApplication構(gòu)造階段 405
10.1.1 理解SpringApplication主配置類 406
10.1.2 SpringApplication的構(gòu)造過程 410
10.1.3 推斷Web應(yīng)用類型 411
10.1.4 加載Spring應(yīng)用上下文初始化器(ApplicationContextInitializer) 412
10.1.5 加載Spring應(yīng)用事件監(jiān)聽器(ApplicationListener) 415
10.1.6 推斷應(yīng)用引導(dǎo)類 416
10.2 SpringApplication配置階段 417
10.2.1 自定義SpringApplication 417
10.2.2 調(diào)整SpringApplication設(shè)置 417
10.2.3 增加SpringApplication配置源 420
10.2.4 調(diào)整Spring Boot外部化配置 423
第11章 SpringApplication運(yùn)行階段 425
11.1 SpringApplication準(zhǔn)備階段 425
11.1.1 理解SpringApplicationRunListeners 426
11.1.2 理解SpringApplicationRunListener 428
11.1.3 理解Spring Boot事件 431
11.1.4 理解Spring事件/監(jiān)聽機(jī)制 432
11.1.5 理解Spring Boot事件/監(jiān)聽機(jī)制 492
11.1.6 裝配ApplicationArguments 509
11.1.7 準(zhǔn)備ConfigurableEnvironment 512
11.1.8 創(chuàng)建Spring應(yīng)用上下文(ConfigurableApplicationContext) 512
11.1.9 Spring應(yīng)用上下文運(yùn)行前準(zhǔn)備 516
11.2 Spring應(yīng)用上下文啟動(dòng)階段 537
11.3 Spring應(yīng)用上下文啟動(dòng)后階段 539
11.3.1 afterRefresh方法簽名的變化 540
11.3.2 afterRefresh方法語義的變化 541
11.3.3 Spring Boot事件ApplicationStartedEvent語義的變化 543
11.3.4 執(zhí)行CommandLineRunner和ApplicationRunner 548
第12章 SpringApplication結(jié)束階段 550
12.1 SpringApplication正常結(jié)束 550
12.2 SpringApplication異常結(jié)束 555
12.2.1 Spring Boot異常處理 556
12.2.2 錯(cuò)誤分析報(bào)告器——FailureAnalysisReporter 562
12.2.3 自定義實(shí)現(xiàn)FailureAnalyzer和FailureAnalysisReporter 564
12.2.4 Spring Boot 2.0重構(gòu)handleRunFailure和reportFailure方法 566
12.2.5 Spring Boot 2.0的SpringBootExceptionReporter接口 567
第13章 Spring Boot應(yīng)用退出 571
13.1 Spring Boot應(yīng)用正常退出 572
13.1.1 ExitCodeGenerator Bean生成退出碼 572
13.1.2 ExitCodeGenerator Bean退出碼使用場景 576
13.2 Spring Boot應(yīng)用異常退出 580
13.2.1 ExitCodeGenerator異常使用場景 582
13.2.2 ExitCodeExceptionMapper Bean映射異常與退出碼 587
13.2.3 退出碼用于SpringApplication異常結(jié)束 589
13.3 小馬哥有話說 594
13.4 下一站:運(yùn)維篇