本书是《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/来关注和监督资金流向。
开头是“最新版本支持HTTP/2”段落接的是上一段的最后一句,不应该换行。
错别字:
这一行的Spring Boot错打成了Sprig Boot:
的运行(如Context、Connector等),以及ClassLoader的装载均由Sprig Boot框架代码实现.
所以能够被@ComponentScan识别,少个n
左右两边版本号写反,应该左边是3.0.0.RELEASE 右边是 2.5.6.SEC03
1.@service与@Component实现属性覆盖,靠的是@AliasFor注释的显性覆盖,而非高低层注解的隐性覆盖。
2.@TransactionalService也可以覆盖@service的同名属性描述有误。如果同名属性是value,那么只能显性覆盖,隐性覆盖不生效(@TransactionalService和@service的value属性值会不一样)。