首页>参考读物>计算机科学与技术>软件与程序设计

Spring Boot技术内幕:架构设计与实现原理
作者 : 朱智胜 著
丛书名 : 源码分析系列
出版日期 : 2020-06-10
ISBN : 978-7-111-65708-8
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 267
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书深入分析了 SpringBoot源代码,教读者从源代码角度了解 SpringBoot的架构、设计思想和重要功能模块的实现原理。
全书共分为三个部分:
第一部分 准备篇(第1章):粗略介绍源码阅读环境的准备、 SpringBoot的整体目录结构、 SpringBoot的设计目标和理念和 SpringBoot的整体框架。
第二部 实现篇(第2~14章)这部分内容是本书的核心,1.5节中会列出SpringBoot的各个核心功能模块,这一部分会逐一去分析这些功能模块的源码,通过源码去讲解各个功能模块的架构、设计思想和实现原理,每个功能模块 用1章的篇幅进行介绍。
第三部分 扩展篇(第15~17章)主要讲解 SpringBoot与周边其他技术的结合,回归到了应用层面,但是具体内容都属于比较高级的知识点,比如SpringBoot打包部署、SpringBoot应用监控、SpringBoot安全(Security)支持等。

图书特色

Spring Boot布道师、技术专家撰写,帮助读者便捷使用Spring Boot、轻松完成
项目调优为宗旨
从源码角度分析Spring Boot的核心技术架构和主要功能的实现原理,系统总结Spring Boot的使用方法、技巧和场景

图书前言

为什么要写这本书
经过几年的发展,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页面,我将尽量在线上为你解答。书中的全部源文件也可以从这个网站下载,我也会及时更新相应的功能。如果你有更多宝贵意见,也欢迎发送邮件至邮箱214399230@qq.com,期待得到你们的真挚反馈。
致谢
首先要感谢那些在写书过程中给予我最大支持和鼓励的朋友,也要感谢那些默默在互联网上分享知识的朋友(我也是其中一员)。正是这些乐于分享知识的人才造就了互联网的繁荣,也正是这些默默无闻的分享者,带给我灵感,他们就像本书的一面镜子,更清晰地反映出我在写作过程中出现的问题。
因为之前参与Bob老师一本书的撰写,我有幸结识了杨福川老师和孙海亮编辑,才促成了这本书的合作与出版。
感谢机械工业出版社华章分社的孙海亮编辑和杨福川老师始终支持我的写作,在他们的鼓励、帮助和引导下,我顺利完成了本书的创作。
谨以此书献给我的父母和朋友们,以及我的读者、众多技术分享者、知识布道者!

上架指导

计算机\程序设计

封底文字

Spring Boot封装了很多实用功能,这样可以帮助初学者快速上手,但是作为Java Web项目的标配,Spring Boot应用场景非常多,不了解其底层实现原理,无论是想灵活应用,还是想写出高效、优雅的Spring Boot代码都是不可能的。

Spring Boot作为一款优秀且成熟的开源框架,研究其源码和底层实现,不仅能够学到Spring Boot的优秀设计,还能学会如何阅读、分析源代码,如何自己写出优雅的代码。
本书可以帮你解决以下问题:

 Spring Boot的核心设计原理是什么,又是如何将“约定优于配置”这一设计范式的发挥到了极致的呢?
 优秀的理念需要组件来实现,Spring Boot核心组件是如何相互协作来实现的呢?
 曾经繁琐的配置文件不见了,Spring Boot是如何实现零配置及自动装配的呢?
 Spring Boot在启动、运行等过程中初始化了些什么,我们又能改变些什么?
 Spring Boot集成了大量优秀框架,我们以几个典型框架来分析集成的秘密。
 你是否也想把自己的框架定义成一个可被集成的starter项目,应用到实践中?
 通过简单的命令便发布、启动一个项目,Spring Boot在背后为我们做了些什么?

图书目录

前 言
第一部分 准备篇
第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

教学资源推荐
作者: [美]Samuel P.Harbison Ⅲ,Guy L.Steele
作者: [美]加里·R. 赖特(Gary R. Wright),W. 理查德·史蒂文斯(W. Richard Stevens) 著
作者: 谢满德 凌云 陈志贤 刘文强 张国萍 编著
作者: 郑阿奇 彭作民
参考读物推荐
作者: Krzysztof Cwalina Brad Abrams
作者: 黄靖钧 编著
作者: (美)Henry S. Warren, Jr. 著
作者: (美)Jennifer Niederst Robbins 著