作为一名初入职场的开发者,最开始是在逛 B 站刷视频时看到的一个 Spring 源码阅读解析,当时作为一个只知道 SSH 和 CRUD 的 boy,看完后心里就两个词儿“卧槽!牛 B 啊!”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗?”每次我都只能一脸便秘的“嗯…,呃…,啊…,木得…”。这在我心里埋下了一个想法,硬着头皮也要把 Spring 框架源码读一遍,再不济也要看看猪是怎么跑的。
学习方法的话,我个人比较喜欢先在 B 站上看相关视频,知道怎么读,从哪下口。然后自己买了本 计文柯老师的《Spring 技术内幕》,比对着从 Spring 官网下载的源码包潜心研读。第一遍读,什么都不懂,按图索骥,迷迷糊糊的读完了;第二遍读,就轻车熟路一些咯,“卧槽!原来如此!”的感叹声也络绎不绝;第三遍就能够在整体代码设计和细节实现两个不同的层次上去吸收 Spring 框架的优点咯。
这三个月来,阅读 Spring 源码给我带来的提升,主要在专业技能上,但同时也辐射到了我的工作、学习、社交等方面。所以,写这篇文章一方面是应“码农翻身”专栏——刘欣老师的建议,做个经验谈,另一方面也是对自己这三个月学习成果的总结。
从 IoC 的各顶层接口到中间一层一层的抽象类,再到最后的实现类,这一整套体系的设计和实现,对自己在日常工作中设计某些功能的接口、抽象类和具体实现,都带来了很有价值的参考,设计模式和巧妙的编码技巧也渐渐变得触手可及。比如,设计一个 VO 字段校验功能时,会先定义一个顶层接口,抽象出公共方法,抽象类中有做必输项字段非空校验的,在其中利用模板方法模式对公共功能做具体实现,特性化功能写成抽象方法交由各子类具体实现即可。
Spring 上很多接口和抽象类,其注解甚至比代码还多,我也经常尝试着去阅读理解这些注释,看看自己的理解与书上的差异,用这种方式来提升英文技术文档的阅读能力,往往更实在一些。
虽然是做技术的,但我也是一个很爱出去耍的人。构建好自己的学习模式能够让你更从容地面对工作和生活。不加班的情况下(所幸部门加班并不太多),我一般会在晚饭之后以及周日时间充电。不管是学技术还是其它什么东西,我认为 以视频为入口,以业界公认的名书继续深入理解,以社交圈的同行或网上社区为输出交流管道,最后持久化到思维导图及学习文档中。Spring 源码学习是我工作之后对自己学习模式构建的一个尝试,构建起这种学习模式之后,个人的工作和生活也变得更加协调平衡,不至于在繁杂忙碌的工作中渐渐丧失学习能力。另外一个比较重要的就是,看 Spring 源码时经常能看到一些与公司框架有异曲同工之妙的编码技巧及实现,比如异常的批量抛出,ConcurrentHashMap 初始化其容量,ThreadLocal 的使用等等,这些都是在读 Spring 源码之前很少会注意或使用的。
对于初级开发者学习 Spring 源码来说,我建议配合阿里的《Java 开发手册》一起看,因为编码能力和框架设计能力是需要很长时间的经验积累才能得到大幅提升的,而编码规范则是我们最开始就能做到并做好的事情,也是很多成熟公司越来越重视的东西。另外,阿里的《Java 开发手册》中不少规范都是参考了 Spring 框架的,这也从侧面体现了 Spring 作为业界知名框架,其编码的规范性是深受认可的。