Spring Boot编程思想(核心篇)
  • 推荐3
  • 收藏7
  • 浏览4.9K

Spring Boot编程思想(核心篇)

小马哥(mercyblitz) (作者) 

  • 书  号:978-7-121-36039-8
  • 出版日期:2019-03-29
  • 页  数:628
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥118.00
本书是《Spring Boot 编程思想》的核心篇,开篇总览Spring Boot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplication。全书的讨论以Spring Boot为中心,议题发散至Spring技术栈、JSR及Java。希望透过全局的视角,帮助读者了解Spring Boot变迁的历程;经过多方的比较,帮助读者理解Spring Boot特性的原理;整合标准的规范,帮助读者掌握Spring Boot设计的哲学。
本书的讨论范围并不会局限在Spring Boot 或Spring Framework,会将Spring Cloud 甚至Spring Cloud Data Flow 纳入参考,探讨Spring Boot 在两者中的运用。站在更宏观的角度,在整个Java EE 的生态中,Spring 技术栈并非独此一家,也不完全是“开山之作”,不少相关的特性可在JSR 规范和其他Java EE 实现中找到原型。换言之,Spring 技术栈可被认为是一种非常成功的“重复发明轮子”,不仅适配了JSR 实现,而且“借鉴”了他山之石,逐步实现了自身的生态系统。

本书从源码的角度探讨Spring Boot的核心特性,深入探究Spring Boot的实现原理,期待读者掌握阅读源码的方法和技巧,全面提升研发能力,进军架构师队伍。
本书全名为《Spring Boot编程思想(核心篇)》,以Spring Boot 2.0为讨论的主线,讨论的范围将涵盖 Spring Boot 1.x的所有版本,以及所关联的Spring Framework版本,致力于:
? 场景分析——掌握技术选型;
? 系统学习——拒绝浅尝辄止;
? 重视规范——了解发展趋势;
? 源码解读——理解设计思想;
? 实战演练——巩固学习成果。
内容总览
由于本书的内容跨度广,所以分“核心篇”“运维篇”和“Web篇”三册分别讨论Spring Boot的功能特性。“核心篇”开篇总览Spring Boot核心特性,逐一讨论Spring Boot官网所罗列之六大特性,然而其中两点并非Spring Boot专属,故点到为止,而将讨论聚焦在其五大特性,分别为自动装配(Auto-Configuration)、SpringApplication、外部化配置、Spring Boot Actuator和嵌入式Web容器。其中,前两者是“核心篇”讨论的议题,后两者则是Spring Boot官方定义的Production-Ready特性,均偏向Spring Boot应用运维,因此纳入“运维篇”的讨论范畴。至于嵌入式Web容器,将结合传统Java EE Servlet、Spring Web MVC和Spring 5 WebFlux的有关内容放至“Web篇”探讨,具体章节安排如下。
? 核心篇
○ 总览Spring Boot
○ 走向自动装配
○ 理解SpringApplication
? 运维篇
○ 超越外部化配置
○ 简化Spring应用运维体系
? Web篇
○ “渐行渐远”的Servlet
○ 从Servlet到Web MVC
○ 从Reactive到WebFlux
○ 嵌入式Web容器
目前,“核心篇”和“运维篇”已编写完毕,“Web篇”正在同步更新,其目录安排可能发生变更,请读者以最终发行版本为准。
在内容结构上,本书采用“总—分—总”的方式,首先总体介绍讨论范围,随后深入展开细节的讨论,最后予以总结。同时,为了避免先入为主的影响,本书将会针对官方文档的描述内容提出疑问或假设,大胆地猜测其可能实现的方式,再结合实现源码加以验证,随后通过示例代码巩固理解。在写作手法上,本书效仿中国历史书籍的传统编著手法,将纪传体和编年体予以综合。从功能特性来看,它属于纪传体,如自动装配、SpringApplication和外部化配置等。如此表述方式更容易系统地介绍Spring Boot和Spring Framework的核心特性。从特性的发展历程来观察,它则属于编年体,如Spring Framework注解驱动编程模型从1.x到5.0的发展与Spring Boot自动装配之间的关联,以及Spring Boot 1.0到1.4的外部化配置源是怎样利用Spring Environment抽象逐步完善的。更重要的是,在论述方式上,增加了论点、论证和论据,从而做到知其然也知其所以然。在对特性的讨论中,会穿插一些补充说明。在特性讨论的结尾处,将总结所论议题。
所谓“兼听则明,偏听则暗”,本书的讨论范围并不会局限在Spring Boot或Spring Framework,会将Spring Cloud甚至Spring Cloud Data Flow纳入参考,探讨Spring Boot在两者中的运用。站在更宏观的角度,在整个Java EE的生态中,Spring技术栈并非独此一家,也不完全是“开山之作”,不少相关的特性可在JSR规范和其他Java EE实现中找到原型。换言之,Spring技术栈可被认为是一种非常成功的“重复发明轮子”,不仅适配了JSR实现,而且“借鉴”了他山之石,逐步实现了自身的生态系统。
总而言之,全书的讨论将以Spring Boot为中心,议题发散至Spring技术栈、JSR及Java。希望读者透过全局的视角,了解变迁的历程;通过多方的比较,理解特性的原理;整合标准的规范,掌握设计的哲学。当您纵览全书之后,或许会明白为什么说“Spring Boot易学难精”。因为它的核心是Spring Framework,而对后者的理解程度又取决于对JSR规范及Java的熟悉度。
配套视频
尽管本书细致地讨论了Spring Boot和Spring Framework相关特性,不过它并非快速上手教程,如果读者具备三年以上的开发经验,或者是资深的Spring用户,那么阅读起来会相对顺畅。反之,如果读者出现阅读困难的情况,则不妨先参考官方文档,掌握基本使用技能,或者观看小马哥在慕课网的免费视频:
? Spring Boot 2.0深度实践——初遇Spring Boot(https://www.imooc.com/learn/933);
? Spring Boot 2.0深度实践之系列总览(https://www.imooc.com/learn/1058)。
其中视频“初遇Spring Boot”先介绍Spring Boot 2.0的基本特性,随后创建第一个Spring  Boot 应用,再将其改造成多Maven模块应用,这有助于对本书示例工程结构的理解。而“系列总览”则是“核心篇——总览Spring Boot”章节对应的视频。换言之,慕课网的“Spring Boot 2.0深度实践”系列属于本书的配套视频。读者可访问https://www.imooc.com/t/5387391或扫描下面的二维码参与报名。

纠错与勘误
如果读者在阅读本书或练习示例的过程中发现了错误,请将错误内容提交至 https://github.com/mercyblitz/thinking-in-spring-boot-samples/issues,小马哥将勘误内容汇总到https://mercyblitz.github.io/books/thinking-in-spring-boot/revision/,修正后的内容将在后续发行的书籍中体现。
公益资金流向
本书五成以上的稿费将捐赠给贫困地区小朋友作为教育公益基金,读者访问https://mercyblitz.github.io/books/thinking-in-spring-boot/donate/来关注和监督资金流向。

目录

第1部分 总览Spring Boot
第1章 初览Spring Boot 2
1.1 Spring Framework时代 2
1.2 Spring Boot简介 3
1.3 Spring Boot的特性 5
1.4 准备运行环境 5
1.4.1 装配JDK 8 5
1.4.2 装配Maven 6
1.4.3 装配IDE(集成开发环境) 8
第2章 理解独立的Spring应用 9
2.1 创建Spring Boot应用 10
2.1.1 命令行方式创建Spring Boot应用 11
2.1.2 图形化界面创建Spring Boot应用 21
2.1.3 创建Spring Boot应用可执行JAR 29
2.2 运行Spring Boot应用 31
2.2.1 执行Spring Boot应用可执行JAR 32
2.2.2 Spring Boot应用可执行JAR资源结构 32
2.2.3 FAT JAR和WAR执行模块——spring-boot-loader 36
2.2.4 JarLauncher的实现原理 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章 理解自动装配 96
5.1 理解@SpringBootApplication注解语义 97
5.2 @SpringBootApplication属性别名 103
5.3 @SpringBootApplication标注非引导类 107
5.4 @EnableAutoConfiguration激活自动装配 108
5.5 @SpringBootApplication“继承”@Configuration CGLIB提升特性 110
5.6 理解自动配置机制 112
5.7 创建自动配置类 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 理解“规约大于配置” 132
6.6 小马哥有话说 134
6.6.1 Spring Boot作为微服务中间件 134
6.6.2 Spring Boot作为Spring Cloud基础设施 135
6.7 下一站:走向自动装配 135
第2部分 走向自动装配
第7章 走向注解驱动编程(Annotation-Driven) 138
7.1 注解驱动发展史 138
7.1.1 注解驱动启蒙时代:Spring Framework 1.x 138
7.1.2 注解驱动过渡时代:Spring Framework 2.x 139
7.1.3 注解驱动黄金时代:Spring Framework 3.x 142
7.1.4 注解驱动完善时代:Spring Framework 4.x 146
7.1.5 注解驱动当下时代: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注解驱动设计模式 225
8.1 Spring @Enable模块驱动 225
8.1.1 理解@Enable模块驱动 225
8.1.2 自定义@Enable模块驱动 226
8.1.3 @Enable模块驱动原理 236
8.2 Spring Web自动装配 250
8.2.1 理解Web自动装配 250
8.2.2 自定义Web自动装配 254
8.2.3 Web自动装配原理 258
8.3 Spring条件装配 270
8.3.1 理解配置条件装配 271
8.3.2 自定义配置条件装配 274
8.3.3 配置条件装配原理 277
第9章 Spring Boot自动装配 292
9.1 理解Spring Boot自动装配 295
9.1.1 理解@EnableAutoConfiguration 296
9.1.2 优雅地替换自动装配 298
9.1.3 失效自动装配 298
9.2 Spring Boot自动装配原理 299
9.2.1 @EnableAutoConfiguration读取候选装配组件 301
9.2.2 @EnableAutoConfiguration排除自动装配组件 305
9.2.3 @EnableAutoConfiguration过滤自动装配组件 307
9.2.4 @EnableAutoConfiguration自动装配事件 313
9.2.5 @EnableAutoConfiguration自动装配生命周期 317
9.2.6 @EnableAutoConfiguration排序自动装配组件 324
9.2.7 @EnableAutoConfiguration自动装配BasePackages 332
9.3 自定义Spring Boot自动装配 337
9.3.1 自动装配Class命名的潜规则 338
9.3.2 自动装配package命名的潜规则 338
9.3.3 自定义Spring Boot Starter 340
9.4 Spring Boot条件化自动装配 346
9.4.1 Class条件注解 347
9.4.2 Bean条件注解 358
9.4.3 属性条件注解 370
9.4.4 Resource条件注解 376
9.4.5 Web应用条件注解 391
9.4.6 Spring表达式条件注解 397
9.5 小马哥有话说 401
9.6 下一站:理解SpringApplication 402
第3部分 理解SpringApplication
第10章 SpringApplication初始化阶段 405
10.1 SpringApplication构造阶段 405
10.1.1 理解SpringApplication主配置类 406
10.1.2 SpringApplication的构造过程 410
10.1.3 推断Web应用类型 411
10.1.4 加载Spring应用上下文初始化器(ApplicationContextInitializer) 412
10.1.5 加载Spring应用事件监听器(ApplicationListener) 415
10.1.6 推断应用引导类 416
10.2 SpringApplication配置阶段 417
10.2.1 自定义SpringApplication 417
10.2.2 调整SpringApplication设置 417
10.2.3 增加SpringApplication配置源 420
10.2.4 调整Spring Boot外部化配置 423
第11章 SpringApplication运行阶段 425
11.1 SpringApplication准备阶段 425
11.1.1 理解SpringApplicationRunListeners 426
11.1.2 理解SpringApplicationRunListener 428
11.1.3 理解Spring Boot事件 431
11.1.4 理解Spring事件/监听机制 432
11.1.5 理解Spring Boot事件/监听机制 492
11.1.6 装配ApplicationArguments 509
11.1.7 准备ConfigurableEnvironment 512
11.1.8 创建Spring应用上下文(ConfigurableApplicationContext) 512
11.1.9 Spring应用上下文运行前准备 516
11.2 Spring应用上下文启动阶段 537
11.3 Spring应用上下文启动后阶段 539
11.3.1 afterRefresh方法签名的变化 540
11.3.2 afterRefresh方法语义的变化 541
11.3.3 Spring Boot事件ApplicationStartedEvent语义的变化 543
11.3.4 执行CommandLineRunner和ApplicationRunner 548
第12章 SpringApplication结束阶段 550
12.1 SpringApplication正常结束 550
12.2 SpringApplication异常结束 555
12.2.1 Spring Boot异常处理 556
12.2.2 错误分析报告器——FailureAnalysisReporter 562
12.2.3 自定义实现FailureAnalyzer和FailureAnalysisReporter 564
12.2.4 Spring Boot 2.0重构handleRunFailure和reportFailure方法 566
12.2.5 Spring Boot 2.0的SpringBootExceptionReporter接口 567
第13章 Spring Boot应用退出 571
13.1 Spring Boot应用正常退出 572
13.1.1 ExitCodeGenerator Bean生成退出码 572
13.1.2 ExitCodeGenerator Bean退出码使用场景 576
13.2 Spring Boot应用异常退出 580
13.2.1 ExitCodeGenerator异常使用场景 582
13.2.2 ExitCodeExceptionMapper Bean映射异常与退出码 587
13.2.3 退出码用于SpringApplication异常结束 589
13.3 小马哥有话说 594
13.4 下一站:运维篇

本书勘误

印次
  • 页码:70  •  行数:12  •  印次: 6

    开头是“最新版本支持HTTP/2”段落接的是上一段的最后一句,不应该换行。

    家有晓白 提交于 2020/8/9 22:12:26
    陈晓猛 确认于 2020/8/10 7:56:37
  • 页码:74  •  行数:5  •  印次: 8

    错别字:
    这一行的Spring Boot错打成了Sprig Boot:
    的运行(如Context、Connector等),以及ClassLoader的装载均由Sprig Boot框架代码实现.

    moumingcao 提交于 2020/10/7 21:58:12
    陈晓猛 确认于 2020/10/9 10:08:20
  • 页码:103  •  行数:7  •  印次: 5

    所以能够被@ComponentScan识别,少个n

    丘山人一口 提交于 2021/5/3 17:02:35
    陈晓猛 确认于 2021/5/6 13:05:35
  • 页码:178  •  行数:1  •  印次: 1

    左右两边版本号写反,应该左边是3.0.0.RELEASE 右边是 2.5.6.SEC03

    爱吃冰淇淋 提交于 2019/6/16 22:36:33
    陈晓猛 确认于 2019/6/17 8:13:50
  • 页码:210  •  行数:11  •  印次: 1

    1.@service@Component实现属性覆盖,靠的是@AliasFor注释的显性覆盖,而非高低层注解的隐性覆盖。
    2.@TransactionalService也可以覆盖@service的同名属性描述有误。如果同名属性是value,那么只能显性覆盖,隐性覆盖不生效(@TransactionalService@service的value属性值会不一样)。

    Jxin-Cai 提交于 2019/11/30 0:49:08
    陈晓猛 确认于 2019/12/10 14:30:05

读者评论

  • 页码:213
    定义了两个txManager的目的是说“为了排除单一Bean被@Transactional.transactionManager默认值筛选的可能”,这里的默认值筛选是什么意思?

    家有晓白发表于 2020/7/5 12:24:00
  • 前言部分提到SpringBoot官网罗列了六大特性,但是其中两点并非SpringBoot专属,不知道下面哪两个不是SpringBoot的专属
    1、创建独立的Spring应用
    2、直接嵌入web容器
    3、提供固化的starter依赖
    4、当条件满足时子哦对那个装配Spring或第三方类库
    5、提供Production-Ready特性
    6、绝无代码生成,不需要xml配置

    xiaotian0401发表于 2020/1/16 11:03:59
  • 页码:231
    在讲ImportSelector接口时,只说明了 “根据ImportSelector的契约,请确保实现为spring组件”
    事例项目中也没有扫描这个@component注解,没有使用@componentScan注解,那这个契约的说明的意义是什么,经测试如果spring把HttpServer与FtpServer都扫描为spring组件的话,application.getBean就会报错。
    所以这里的解释的目的不太清楚,麻烦小马哥解释一下。
    经自己测试,不加@component注解是没问题的

    xiaochaodou发表于 2019/7/29 22:57:16

相关博文

  • 小马哥终于出手!Spring Boot综合能力全面升级!

    小马哥终于出手!Spring Boot综合能力全面升级!

    管理员账号 2019-04-08

    自从Spring Boot问世以来,就受到了广大开发人员的极大关注,相关的学习资料也很多,但很多读者在掌握Spring Boot的基本用法之后,在遇到实际项目的时候,很多核心问题却难倒了读者,比如: Spring Boot是如何基...

    管理员账号 2019-04-08
    1645 0 1 0
  • 硬核图书系列:《Spring Boot编程思想(核心篇)》

    硬核图书系列:《Spring Boot编程思想(核心篇)》

    陈晓猛 2020-02-05

    小编说: 疫情像施了魔法一样,改变了我们每个人春节的轨迹。时间则从永远不够用突然变成了多得似乎不知干什么用。博文菌希望疫情没有改变我们那颗求知若渴的心。 博文菌在前两天已经为您开放了 博文视点学院平台上80余本电子书+有声书 ,供...

    陈晓猛 2020-02-05
    288 0 0 0