与IOC、AOP、SPI一样,Spring 提供的不只是一个开发框架,还包括它的设计思想。
它通过解耦 Bean 对象的实例化过程,管理 Bean 的生命周期,来维护开发过程中对象的使用过程。让你不需刀耕火种般 “new ”一个对象,也不需如 EJB 一样笨重臃肿地开发维护,只需像春风一样万物(万物皆可Bean)细无声般地使用。可以说,Spring完全担得起 Java 技术设计顶峰的称号。
除了运用,Spring 框架也是众多开发者最先接触到的一个源码级复杂项目。
对于任何初出茅庐,完成初次蜕变的开发者来说,苦苦寻觅各种项目进行练习,都不如学习 Spring 源码来得痛快。在其架构的设计、分治抽象的运用、设计模式的驾驭上,Spring 框架都是顶级的,也是最能给你带来丰富收获的。
学习 Spring 源码难吗?
难!
难到有1~2年编程经验的工程师,也不知道从哪里下手。
大部分资料和书籍都是从一个知识点直接透析到内核。
没有阅读源码经验的小白,根本没法如编写者般感同身受地学习,看时如云里雾里,忘时如过眼云烟。
为啥会这样?
因为 Spring产生太久了,源码太大了,主干核心源码外的繁枝末节太多太多。就像将一个沙发左移、套个沙发罩、盖上一块布,再铺个小坐垫,沙发套、盖布、坐垫对初学源码的开发者来说,并没有那么重要,我们要了解的是最初的沙发、最开始的木板,看看它的结构、闻闻它的味道。
所以,如果你真地想了解Spring 这个源码级复杂框架的设计和实现精髓,就应该像开发一个项目一样,从零写一遍。只有你写了这个项目,才能知道具体细节是如何处理的,各类设计是如何实现的。
驾驭复杂源码
对于大部分使用 Spring 框架的研发人员来说,在遇到 Spring 框架的报错提醒, 以及需要基于 Spring 框架开发 SpringBoot Starter 等技术类组件时,都会尝试阅读 Spring 框架的源码。
由于 Spring 框架的源码庞大、复杂,也不像平常的业务流程代码开发一样具有分层结构,并且使用了大量的设计模式,所以阅读难度较大,研发人员很难厘清其中的调用链路和各个类之间的关系。
《手写Spring:渐进式源码实践》一书的作者小傅哥最初学习Spring时,也阅读了不少相关图书,在反复学习后,仍然不能轻易理解 Spring 框架中各个功能的实现细节。其中一个原因是自己没有手动实现,只阅读图书,很难完全掌握 Spring 框架的精髓。
在学习过程中,小傅哥对 Spring 框架有了非常深入的了解和认识,也体会了更多精妙的设计原则和设计模式。彻底从实现上搞清楚:上下文如何管理、Aware如何通过SPI机制处理感知对象通知、切面拦截如何设计、三级缓存循环依赖如何实现、ORM框架怎么整合到Spring,等等。
手写Spring
独乐不如众乐,小傅哥把手动实现简单版 Spring 框架的内容编写成书,希望帮助更多的研发人员学习Spring 源码,编写出有价值的源码设计方案。
从此,你多了一段“手写Spring”项目的学习经历:具备了复杂源码的架构设计能力、吸收了复杂场景分治和抽象的思想、我就是学会了复杂结构中设计模式的运用。你手写过Spring的代码,以后路,你可以横着走!
内容简介
本书共21章。
第1~10 章:主要介绍IOC 容器,逐步完善一个简单的Spring Bean 容器的相关功能,引入实例化策略、注入属性和依赖、设计应用上下文、处理Bean 对象的生命周期,以及实现感知容器对象的监听等。
第11~12 章:主要介绍AOP 切面,基于JDK、Cglib 的动态代理、方法拦截、切点表达式等技术,将代理与Spring Bean 容器整合,提供AOP 切面功能。
第13~17 章:扩展简单版Spring 框架的自动化功能,完成自动扫描注册、注解和代理注入,以及通过三级缓存处理对象的循环依赖等功能。
第18~21 章:基于简单实现的Spring 框架整合JDBC、事务的功能,开发一个简单版的ORM 框架,并将ORM 框架整合到Spring Bean 容器中,介绍自定义代理对象的扫描和注册过程。
本书主要通过渐进式开发功能模块,以实现开发整个Spring 框架的核心源码。
首先,每章开头都会列出难度和重点;然后,正文中会介绍要处理的问题、具体设计和实现代码;最后,给出测试验证和本章总结。
地图:框架全貌
读者在学习的过程中,可以参考书中Spring 框架地图,通过全局的视角,可以更好地理解和学习 Spring 框架的设计与开发。
业内专家推荐
心似平原走马
若焰晨星,无量黎明。绽燃何须喧闹,灿烂不惧寂寥。我就愿意做一个心似平原走马的人,也更享受那份安静的执着。我也希望以我的经验分享给这条路上的同行。
69元包邮到家
首发限时特惠,限量100本
抽奖赠书
按以下方式与博文菌互动,即有机会获赠本书!
活动方式:在本文下方留言,说出你学习Spring的故事参与活动,届时会在参与的小伙伴中抽取1名幸运鹅!
活动时间:截至11月11日开奖。
快快拉上你的小伙伴参与进来吧~~