描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111657088
(1)本书由Spring Boot布道师、技术专家撰写,从源码级切入,以指导实践为宗旨,可谓深度和实操性兼具。
(2)本书以新版本的【Spring Boot 2.x】的源码为基础,不仅提炼出了Spring Boot源码的核心思想,还对Spring Boot框架中的数十个主流功能模块进行了源码级的分析。
(3)本书在各章相关部分都给出实践指导,还以用独立章节以实际案例的形式对实践应用进行专门指导。
这是一本从源码角度分析Spring Boot底层原理和实现方式,以求帮助读者掌握Spring Boot多场景联合运用、项目性能调优的实践指导书。作者是Spring Boot领域的布道者、技术专家,曾以视频、文章等形式分享自己多年实践及研究Spring Boot的经验,影响近50万该领域的读者。
本书以新版本的Spring Boot 2.x的源码为基础进行分析,不仅提炼出了Spring Boot源码的核心思想,还从多个维度对Spring Boot框架中的数十个主流功能模块进行了源码级的分析,更为难能可贵的是,书中还对Spring Boot外置辅助工具进行了源码级的分析。此外,为了指导读者实践应用,本书除了在各章相关部分给出实践方法外,还以用独立章节以实际案例的形式进行专门指导。
本书从逻辑上可分为4个部分:
第①部分准备部分,包括第1章,这部分主要介绍进行Spring Boot解析需要做的准备工作,包括源码的获取与调试、源码阅读工具等,同时还给出了需要在思想层面做的准备——整体了解源码目录结构和Spring Boot设计思想。
第②部分为原理部分,包含第2~4章内容,着重讲解Spring Boot实现的原理及基本流程,这是Spring Boot的核心之一,也是后面章节的基础。
第③部分为内置组件部分,包含第5~12章,着重讲解Spring Boot内置集成框架的实现原理、源代码分析及实战分析,其中包括对外化配置、web应用、内置servlet容器、数据库、消息源、缓存、日志进行的源码级的分析和实践运用指导。
第④部分为外置组件部分,包含第13~16章,着重讲解实际项目实施过程中肯定会用到的单元测试、打包、部署、监控等相关外置辅助工具,这部分不仅介绍了相关工具的集成方法,还从源码角度进行了详细解析。
★部分 准备篇
- 第1章 阅读代码前的准备 2
1.1 获取和调试Spring Boot源代码 2
1.1.1 获取Spring Boot的源代码 2
1.1.2 调试Spring Boot的源代码 3
1.2 Spring Boot源代码的目录结构 3
1.2.1 Spring Boot的整体项目结构 4
1.2.2 spring-boot-project项目结构 5
1.3 源代码阅读工具 5
1.4 Spring Boot的设计理念和目标 6
1.4.1 设计理念 7
1.4.2 设计目标 7
1.5 Spring Boot的整体架构 7
★第二部分 原理篇
- 第2章 Spring Boot核心运行原理 10
2.1 核心运行原理 10
2.2 运作原理源码解析之@EnableAuto-Configuration 11
2.2.1 入口类和@SpringBootApplication注解 11
2.2.2 注解@EnableAutoConf?iguration功能解析 14
2.3 AutoConf?igurationImportSelector源码解析 15
2.3.1 @Import注解 16
2.3.2 ImportSelector接口 16
2.3.3 AutoConf?igurationImportSelector功能概述 17
2.3.4 @EnableAutoConf?iguration自动配置开关 18
2.3.5 @EnableAutoConf?iguration加载元数据配置 19
2.3.6 @EnableAutoConf?iguration加载自动配置组件 21
2.3.7 @EnableAutoConf?iguration排除指定组件 24
2.3.8 @EnableAutoConf?iguration过滤自动配置组件 25
2.3.9 @EnableAutoConf?iguration事件注册 32
2.4 @Conditional条件注解 33
2.4.1 认识条件注解 33
2.4.2 条件注解的衍生注解 34
2.5 实例解析 39
2.6 小结 41
- 第3章 Spring Boot构造流程源码分析 42
3.1 SpringApplication的初始化简介 42
3.2 SpringApplication实例化流程 43
3.3 SpringApplication构造方法参数 44
3.4 Web应用类型推断 45
3.5 ApplicationContextInitializer加载 47
3.5.1 源码解析 47
3.5.2 实例讲解 49
3.6 ApplicationListener加载 50
3.7 入口类推断 51
3.8 SpringApplication的定制化配置 52
3.8.1 基础配置 52
3.8.2 配置源配置 53
3.9 小结 54
- 第4章 Spring Boot运行流程源码分析 55
4.1 run方法核心流程 55
4.2 SpringApplicationRunListener监听器 57
4.2.1 监听器的配置与加载 57
4.2.2 SpringApplicationRunListener源码解析 59
4.2.3 实现类EventPublishingRun-Listener 60
4.2.4 自定义SpringApplicationRun-Listener 62
4.3 初始化ApplicationArguments 63
4.4 初始化Conf?igurableEnvironment 63
4.4.1 获取或创建环境 65
4.4.2 配置环境 66
4.5 忽略信息配置 68
4.6 打印Banner 68
4.7 Spring应用上下文的创建 69
4.8 Spring应用上下文的准备 70
4.8.1 应用上下文准备阶段 71
4.8.2 应用上下文加载阶段 73
4.9 Spring应用上下文的刷新 75
4.10 调用ApplicationRunner和CommandLineRunner 77
4.11 小结 78
★第三部分 内置组件篇
- 第5章 Spring Boot外化配置源码解析 80
5.1 外化配置简介 80
5.2 ApplicationArguments 参数处理 81
5.2.1 接口定义及初始化 81
5.2.2 使用实例 85
5.3 命令参数的获取 86
5.4 配置文件的加载 88
5.5 基于Prof?ile的处理实现 93
5.6 综合实战 97
5.7 小结 102
- 第6章 Spring Boot Web应用源码解析 103
6.1 遗失的web.xml 103
6.2 Web应用的自动配置 104
6.2.1 DispatcherServlet自动配置 105
6.2.2 DispatcherServletRegistrationBean自动配置 108
6.3 Spring MVC的自动配置 111
6.3.1 ViewResolver解析 112
6.3.2 静态资源的支持 114
6.3.3 静态index.html 115
6.4 综合实战 117
6.5 小结 120
- 第7章 Spring Boot 内置Servlet容器源码解析 121
7.1 Web容器自动配置 121
7.1.1 Servlet Web服务器概述 121
7.1.2 自动配置源码分析 122
7.2 WebServer初始化过程 128
7.3 DispatcherServlet的加载过程 134
7.3.1 DispatcherServlet的获取 134
7.3.2 DispatcherServlet的加载 138
7.4 综合实战 140
7.5 小结 141
- 第8章 Spring Boot 数据库配置源码解析 142
8.1 自动配置注解解析 142
8.2 自动配置内部实现解析 150
8.2.1 EmbeddedDatabase-Configuration 151
8.2.2 PooledDataSource-Configuration 155
8.3 JdbcTemplateAutoConfiguration 157
8.4 异常案例分析 159
8.5 小结 159
- 第9章 Spring Boot 消息源码解析 160
9.1 JMS基础自动配置 160
9.1.1 JmsAutoConf?iguration的注解 160
9.1.2 JmsAutoConf?iguration内部实现 164
9.2 ActiveMQ自动配置 166
9.3 @JmsListener注解解析 173
9.4 小结 175
- 第10章 Spring Boot Cache源码解析 176
10.1 Cache简介 176
10.2 Cache自动配置 177
10.3 默认Cache配置 183
10.4 小结 188
- 第11章 Spring Boot 日志源码解析 189
11.1 LoggingApplicationListener的触发 189
11.2 LoggingApplicationListener的执行 191
11.2.1 ApplicationStartingEvent事件处理 192
11.2.2 ApplicationEnvironment-PreparedEvent事件处理 196
11.3 小结 203
- 第12章 实战:创建Spring Boot自动配置项目 204
12.1 自定义Spring Boot Starter项目 204
12.2 Starter测试使用 207
12.3 小结 208
★第四部分 外置组件篇
- 第13章 Spring Boot单元测试 210
13.1 Spring Boot对单元测试的支持 210
13.2 常用单元测试注解 211
13.3 JUnit5单元测试示例 212
13.4 Web应用单元测试 214
13.5 MockMvc的自动配置 217
13.5.1 AutoConf?igureMockMvc注解 217
13.5.2 MockMvcAutoConf?iguration自动配置 219
13.6 小结 221
- 第14章 Spring Boot打包部署解析 222
14.1 Spring Boot的jar包 222
14.1.1 jar包的生成 222
14.1.2 jar包的结构 227
14.2 Launcher实现原理 227
14.2.1 JarLauncher 228
14.2.2 WarLauncher 232
14.3 小结 234
- 第15章 Spring Boot 应用监控解析 235
15.1 Actuator简介 235
15.2 Actuator自动配置 237
15.2.1 HealthEndpoint自动配置 237
15.2.2 HealthIndicator实现 240
15.3 Actuator端点展示 244
15.4 小结 247
- 第16章 Spring Boot Security支持 248
16.1 Security自动配置 248
16.2 SecurityAutoConfiguration详解 249
16.3 SecurityFilterAutoConfiguration详解 255
16.4 小结 257
【为什么要写这本书】
经过几年的发展,Spring Boot几乎已成为Java企业级开发的标准框架,它为开发人员提供了极其方便的项目框架搭建、软件集成功能,极大地提升了开发人员的工作效率,减少了企业的运营成本。而Spring Boot又极其简单易用,一个新手按照官方文档的指导在十几分钟内就能创建一个可运行的Spring Boot项目。
Spring Boot的研发团队实现了用软件改变世界的梦想,实现了另外一种形式的创新。有句话说得非常好:“世界上90%的行业都值得重做一遍,当你把它们做到极致时,那便是创新。”Spring Boot做到了这一点,也得到了市场和用户的认可。
Spring Boot为开发人员提供了方便,但一些开发人员并不了解Spring Boot为什么可以带来方便的底层逻辑,也没有尝试借鉴Spring Boot的这种创新。这不仅会导致他们在使用Spring Boot的过程中不能深层次发挥它的优势,还会导致在大范围应用Spring Boot之后出现各种问题却找不到解决办法的情况,更别说借鉴Spring Boot的创新了。
作为软件开发人员,我们都知道设计模式很重要。为什么重要呢?因为这些设计模式是解决编程过程中一些典型问题的标准方法,已经被验证和认可。学习了这些解决方案,在遇到类似的问题时,软件开发人员便不用“重复造轮子”,直接借鉴经验即可。
当然,如果在使用Spring Boot的过程中只是简单地“用”,而不去思考其背后的实现逻辑与思想,即便用得再好,收获也是有限的—这样只能做到“手熟”,并不能拥有“匠心”。更重要的是,如果不学习Spring Boot背后那些优秀的设计理念和实现方式,我们肯定不能真正用好Spring Boot。
学习Spring Boot的设计理念和实现方式除了能够让开发人员从“手熟”的境界跨入“匠心”的境界,还能够让开发人员在其他业务场景中触类旁通地找到更加优秀的解决方案。同时,开发人员也能够了解代码和项目背后的深层逻辑,这会为以后的工作带来诸多好处。
因此,我在使用Spring Boot的过程中并未停留在“用”的层面,而是不断地研究、总结其源代码,发掘背后的优秀设计理念及实现方式。现在,我通过这本书将研究的一些方法和成果分享给大家。
技术在不断地快速迭代,但核心逻辑是永远不会变的,希望读者在阅读本书的同时,也关注分析源代码的方法和思路。“授之以鱼,不如授之以渔”,如果读者能够通过阅读本书,理解了Spring Boot背后的设计理念和实现方式,甚至寻找到更加优秀的解决方案,那将是我的欣慰。
【读者对象】
- Spring Boot的使用者和爱好者。
- Spring系列框架的使用者和爱好者。
- 对源码感兴趣,希望学习源码解析相关方法的技术人员。
- 开设Spring Boot相关课程的院校师生。
【本书特色】
本书有别于市面上其他Spring Boot入门和实战类的相关书,更多侧重于Spring Boot设计思想、原理及具体功能实现的源代码分析,从一个更深的层次带领读者了解Spring Boot。书中内容涵盖范围较广,却又不显冗余,每一个知识点都通过典型的功能实现来进行分析。
本书内容基于Spring Boot 2.2.1,书中涵盖的许多知识点都是我多年经验的总结,希望能给读者带来全新的知识盛宴。
【如何阅读本书】
由于本书的重点在于对Spring Boot源代码的分析及底层逻辑实现的讲解,因此对读者的水平有一定的要求。
首先,读者要对Spring Boot有一定的实战经验,要会用一些具体的功能,这样,配合本书的讲解才能够达到更好的学习效果。
其次,读者需要有一定的Spring使用经验。Spring Boot基于Spring框架,使用了大量Spring相关的功能及特性,由于本书重点讲解Spring Boot的实现原理,对Spring功能及特性无法大量拓展,因此需要读者有一定的Spring相关基础,这样才能更好地理解本书内容。
本书从大的方面可分为四部分,对于这四部分的阅读建议如下。
- 部分为准备篇(第1章),这是阅读本书需要做的准备工作,包括源码的获取与调试、源码阅读工具的准备等,并带领读者从整体上了解源码目录结构和Spring Boot设计思想。建议大家都看一看。
- 第二部分为原理篇(第2~4章),着重讲解Spring Boot的实现原理及基本流程,这是Spring Boot的核心内容之一,也是读者学习后面章节的基础,建议读者系统学习。
- 第三部分为内置组件篇(第5~12章),着重讲解Spring Boot内置集成框架的实现原理及源代码分析,读者在学习了第二部分内容之后,在这里可根据需要进行独立章节的学习。
- 第四部分为外置组件篇(第13~16章),着重讲解项目实施过程中单元测试、打包部署、监控等相关外置辅助工具的集成及源码解析,对这部分读者可根据需要进行独立章节的学习。
本书提供了源代码阅读准备章节和实战内容。读者可根据需要选择性阅读。
【勘误和支持】
由于本书是基于Spring Boot 2.2.1撰写,大多数内容较新,可用于参考及校对的资料较少,同时在写作过程中Spring Boot官方又进行过几次版本升级,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。
为此,我创建了一个在线支持与应急方案的二级站点(https://github.com/secbr/springboot-book)。你可以将阅读本书时发现的错误发布在Bug勘误表页面中。如果你在学习中遇到了问题,也可以访问Q&A页面,我将尽量在线上为你解答。书中的全部源文件也可以从这个网站下载,我也会及时更新相应的功能。如果你有更多宝贵意见,也欢迎发送邮件至邮箱[email protected],期待得到你们的真挚反馈。
评论
还没有评论。