前言
丁雪丰
讲述:Alloy大小:3.63M时长:15:51
能够捧起这本“大部头”作品,没有被它的“体型”吓退,你是一位真正的勇士。在开始阅读前,请接受我诚挚的敬意,所有敢于挑战自己的人,都值得尊敬。而我也由衷地希望本书能够不负你的期望,让你真正学有所得。
为什么要写这本书
自从 2004 年 Spring Framework 1.0 正式发布后,它就一路高歌猛进,已然成为 Java EE 开发的事实标准。从诞生之初缺少相关的中文材料,一份翻译的官方文档都显得弥足珍贵,到现在铺天盖地的文章、图书与视频,Spring 相关的学习资料可谓“琳琅满目”。素材虽然很多,可是它们的质量却良莠不齐。每当有人让我推荐些 Spring 的资料时,我都会告诉他,保险起见还是去看官方文档吧!
在 2018 年底的 QCon 大会上,极客时间找到我希望做一门 Spring 的视频课程,当初最困扰我的问题就是:“已经有了这么多学习资料,还需要再做个课程吗?”那时我虽然没有明确的答案,但还是选择了优先完成课程的制作。2019 年初,课程上线没几天,视频课程的订阅数就突破了 1 万人次。我才意识到原来有不少人希望有这样一门课程,带着大家一路学习,答疑解惑。到这个时候,我才确定:需求是真实存在的。大家的学习热情和订阅数就是对之前的问题最好的回答。
当图灵公司的编辑找到我,希望我写本原创的 Spring 图书时,我又经历了这样一个类似的阶段。但有了之前的经验,“写不写”的思想斗争时间并不长,更多则是在思考如何才能写出一本大家都能用得上的好书。
此外,对于本书的写作,我也是有些小小的“私心”的。很久以前,我给自己定了个“小目标”——30 岁之前每年翻译一本书,30 岁之后独立写作一本书。从 2008 年翻译《JRuby 实战》开始,我就走在了完成这个目标的路上。到现在为止,我已经翻译了 7 本不同技术主题的作品,参与了 1 本书的创作,录制了 1 门视频课程——努力完成了目标的前半段;在自己快要“奔四”之际,终于即将把这个目标的后半段实现了。我希望自己多年的技术积累不止于自己,能够通过翻译和写作的方式帮到更多朋友,从而为中国软件行业的发展贡献一点小小的力量。
本书特色
希望本书能够在以下几个方面给大家带来“与众书不同”的体验。
内容详尽且精炼——本书希望能够将在日常工作中用到的 Spring 家族成员一次性全部收入囊中,包括但不限于 Spring Framework、Spring Boot、Spring Security、Spring Data 和 Spring Cloud。Spring 家族成员数量“繁多”,很多朋友在学习过程中遇到的一大问题就是需要找上一堆书,而不同图书之间的知识点不好衔接,学习的过程可谓“东一榔头西一棒槌”,找不到学习的主线,最终的结果可能就是学了个“寂寞”。这本书的首要目标就是在尽可能短的时间和尽可能小的篇幅里,帮助大家做到“学习一本书就能够解决工作中的大部分问题”。
主题实用且本土化——书中的内容要贴近实际的工作场景。除了基础知识,书中更多的是那些能够拿来就用的内容,我们需要的是解决实际问题。例如,关于如何配置 DataSource,一般的书会告诉大家如何配置,只要能连上数据库就行了,但本书中专门安排了一节告诉大家如何加密连接用的密码、如何记录执行的 SQL 摘要日志等技巧。此外,与从国外引进的作品不同,本书的内容相对更本土化一些,除了 Spring 本身,书中还加入了一些在国内使用相对较多的项目。例如,在国内,MyBatis 比 Hibernate 更受大家的青睐,各家大厂都在重度使用。书中不仅介绍了 MyBatis,还介绍了让它如虎添翼的周边工具。此外,阿里巴巴的 Druid 和 Dubbo 也有不少用户,很多公司都选择将 Dubbo 作为内部 RPC 的框架。Spring Cloud Alibaba 也是一定不能错过的内容,无论你是否使用阿里云的服务,都应该对它有所了解,书中还介绍了 Nacos 和 Sentinel 的具体用法。
案例系统且完善——想要更好地理解书中的知识点,没有什么比生动的示例更有效的了。除了简单的代码示例,本书还特别设计了一个贯穿全书的“大型”二进制奶茶店项目案例。随着书中内容的演进,这个奶茶店的功能逐渐丰富,越来越接近真实世界的线上奶茶店。跟着我们的演示,你就能轻松地搭建出一套完整的分布式系统。如果你的需求比较简单,对系统没有太高的要求,也许可以复制二进制奶茶店的代码,拿来就用。
知识有趣且深刻——如果只是介绍 Spring 家族成员的各种使用方法,那未免有些无趣,遇到一些知识点时,我们还要由点及面,多介绍些相关的信息,包括但不限于背景知识、实用技巧、常见问题、实现原理等。例如,在介绍事务时,我们会聊声明式事务背后的原理;在处理金额时,我们会聊为什么不用浮点数类型,而要使用 Money 类型;在使用 JPA 时,我们会讲解 JpaRepository 背后的实现原理;在介绍服务注册机制时,我们会了解 Zookeeper 不适合做服务注册中心的原因……这些知识点很有意思,一方面可以加深我们对相关技术点的理解,另一方面也相当于我们从正文的学习中暂停片刻,进行简单的梳理和思考。所有的这些内容,我们都以“茶歇时间”的形式呈现了出来。按本书编辑的说法,这才是我全书写得最有意思的地方,大家一定不要错过书中四十余处的“茶歇时间”。
遗憾之处
本书也并非十全十美,由于从写作到出版的时间跨度很大(足足有两年之久),虽然过程中几次更新了相关项目的版本,但仍然没有办法做到完全与社区的最新版同步。甚至有些项目还没有发布正式版,只能放在附录里。例如,Spring Framework 6.0 截至本书编写时还未正式发布,为了尽量与时俱进,附录里添加了如何升级到 Spring Framework 6.0 和 Spring Boot 3.0 的说明。对于目前尚不成熟,但未来会“大有作为”的 Spring Native 项目,附录中也做了简单的介绍。
主要内容
本书的内容涉及面非常广,囊括了 Spring 家族中的众多产品。全书一共分为五部分,其中正文四部分共计 16 章内容,最后一个部分是附录。
第一部分“Spring 入门”包括第 1 章~ 第 5 章,主要介绍 Spring Framework 的核心内容,即 IoC 容器与 AOP,随后从 Spring Framework 过渡到 Spring Boot。网上介绍 IoC 与 AOP 的资料有很多,如果你是直接上手实战的话,暂时无须在相关知识点上花费太多时间。但是,考虑到两者是整个框架的基础,书中还是用了足量的篇幅来介绍它们。
第二部分“Spring 中的数据操作”包括第 6 章~ 第 8 章,围绕数据操作展开讨论。从最基础的 JDBC 操作,一直到 Spring Data 提供的各种封装,以及对象关系映射框架的使用,如何使用缓存等话题,都会在这部分娓娓道来。除了常见的内容,这一部分还提及不少原理和实用技巧,例如 Spring Framework 对 JDBC 异常的统一处理机制,如何基于它进行定制;如何使用 MyBatis 的各种周边工具简化日常开发工作。
第三部分“使用 Spring 开发 Web 应用”包括第 9 章~ 第 11 章,讨论与 Web 开发相关的内容,包含大量日常工作中的场景。这一部分既会讨论如何使用 Spring MVC 开发 Web 系统,如何使用 Spring Security 来保护系统安全,也会介绍一些更高级的玩法,例如基于 Spring WebFlux 开发响应式 Web 系统、使用 Spring Session 来实现分布式会话等。
第四部分“使用 Spring 开发微服务”包括第 12 章~ 第 16 章,主要介绍分布式系统开发涉及的内容。我们会先从微服务和云原生的概念切入,讨论什么才是 RESTful 风格的微服务;再从“道”切换成“术”,聊聊如何利用 Spring Cloud 和其他基础设施来开发云原生服务,其中包括服务注册与发现、服务配置管理、服务容错保护等诸多内容。此外,除了 Spring Cloud 官方支持的 ZooKeeper、Consul、Resilience4j,书中还加入了阿里巴巴提供的组件的内容。
最后是附录,这里主要是将那些不便放在正文中的内容做个说明。附录分为两大主题,其一是新技术,包括接下来要发布的新版本——Spring Framework 6.0 和 Spring Boot 3.0,还有正在快速迭代的 Spring Native 项目;其二是实用技巧,主要是如何将 Spring Boot 项目打包成能开箱即用的 Docker 镜像。
再次强调一下,为了帮助大家更好地学习和掌握书中的内容,本书还设计了一个贯穿全书的示例——二进制奶茶店,大家可以跟随这个例子从零开始,一步步构建出一套完整的基于主流基础设施的分布式系统。
如何阅读本书
既然是一本介绍 Spring 家族成员的书,那么本书的读者需要对 Java 有所了解,掌握 Java 日常开发的基础知识。
如果你是一位初学者,刚开始接触 Spring,建议你跟随本书的内容脉络,一章一章地进行学习,并动手实现书中的例子。由于本书的篇幅较长,如果你时间有限,建议优先阅读前三部分,并且跳过其中的第 8 章和第 11 章的进阶内容。当然,大家最好是能够通读全书后再根据自己的实际掌握情况查缺补漏。
如果你是一位有一定经验的开发者,已经用 Spring 开发过一些实际的项目了,可以跳过书中各个章节中的基础内容(例如第 2 章中的 2.1 节和 2.2 节就是 IoC 容器和 Bean 的基础知识),直接阅读进阶部分的内容,想必你会对那里的内容更感兴趣。你可以根据自己想要了解的内容,或者是遇到的问题,直接通过目录定位到特定的章节,快速通读后,对相关内容构建个大概的认识,说不定还能直接找到答案。
无论是否有经验,我都推荐大家读读书中的“茶歇时间”。“茶歇时间”的内容包罗万象,跟相应章节的内容关联紧密,其中一部分是我的个人经验、深度思考的体现(例如技巧、行业热门问题分析等),还有一部分是专门为大家学习而设计的关联知识(例如背景知识、实现原理等)。值得一提的是,本书将“茶歇时间”也编进了目录,方便大家快速定位。
最后,希望大家把本书作为 Spring 的参考手册,放在电脑边,经常翻翻,基础知识怎么巩固都不为过。
本书资源
本书有大量的代码示例,书中的代码只是片段,GitHub 上提供了完整可运行的工程,可以从 https://github.com/digitalsonic/learning-spring-samples/ 下载。另外,你也可以从图灵社区本书主页 下载打包好的代码。
本书的内容涉及大量开源项目,下表罗列了其中的主要项目及其版本。
本书涉及的主要开源项目及其版本
勘误
由于 Spring 家族十分庞大,各个产品的迭代速度也很快,再加上自己才疏学浅,书中难免会存在一些错误,希望大家能够将这些信息反馈给我,以便再次印刷时进行修订。如果有什么问题,也欢迎大家一起探讨,大家可以通过电子邮件 digitalsonic@sina.com、新浪微博 @digitalsonic 或者图灵社区与我或本书编辑取得联系。
致谢
一本书从构思到写作再到最终能够出版,是一个系统性的大工程。这个过程中需要很多人的共同努力,没有你们,这个任务将永远无法完成。
首先,感谢家人,感谢你们让我在繁忙的工作之余还能有时间去完成本书的编写,没有你们的支持,是很难坚持两年的“不断输出”的。
其次,感谢促成本书的编辑刘美英,没有你最初的“怂恿”也许就不会有后面的故事。在本书撰写过程中,有时我会感觉自己与读者之间有道“鸿沟”,你的许多建议帮我跨越了这道鸿沟。
再次,感谢成长过程中一路陪我走过的各位好友,在此就不一一列举各位的名字了,你们是我学习和进步的榜样。没有你们,也许我就不会走上编程的道路,不会接触技术翻译和写作,不会跟同行进行思想碰撞,甚至可能不会从事这个行业……如果是那样,我的人生一定会是另一番光景。
最后,也是最重要的,必须要感谢捧起这本书的你,谢谢各位读者朋友愿意将自己宝贵的时间花在这本书上。在知识获取方面,哪怕本书只能帮上一点儿小忙,我都将不胜荣幸。但是,我更希望它能够超出你的“预期”,除了帮助你牢牢掌握 Spring,还能协助你构建完善的 Java 开发技能,养成优秀的编程习惯。
在本书的内容编写上,作为作者,我已全力以赴。现在,请大家与我同行,也请你竭尽所能——这次,我们一定要学透 Spring!
丁雪丰
2022 年 10 月 1 日于上海
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
这本书是一本关于Spring框架的详实全面的大部头作品,适合想要系统学习Spring框架的读者。书中分为五部分,涵盖了Spring家族中的众多产品,包括Spring入门、Spring中的数据操作、Web开发、微服务开发等内容。作者建议初学者跟随书中内容脉络一章一章地进行学习,并动手实现书中的例子;有经验的开发者则可以直接阅读进阶部分的内容。书中还设计了一个贯穿全书的示例——二进制奶茶店,帮助读者从零开始构建出一套完整的基于主流基础设施的分布式系统。此外,书中还提供了大量的代码示例和涉及的主要开源项目及其版本。总的来说,这本书是一本内容丰富、实用性强的Spring框架参考手册,适合广大Java开发者阅读学习。
2024-01-04给文章提建议
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
《学透 Spring:从入门到项目实战》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
[1]:在极客时间的《玩转 Spring 全家桶》课程中,我的理念是在一开始以实践为主,跳过对 Spring Framework 核心概念的介绍,之后在使用过程中通过例子进行说明。而且,考虑到网络上有大量介绍基础概念的文章,大家应该并不陌生。但事实是,对于初学者而言,能在一开始先学习基础概念,效果会更好。所以,在本书的撰写过程中,我特意将这块拼图补齐了。
[2]:图灵社区本书主页为:,你可以通过这个页面下载本书资源、提交勘误,在留言区反馈意见等。