阅读 Spring 源码的技巧分享

前言

做为一名 java 开发者,Spring 可以说与我们的日常工作息息相关。Spring 从诞生之日到现在,依然是炙手可热的开源项目。未来的时间里,Spring 依然会是引领一样的存在。

因为它的使用广,而且在未来几年的工作中依然是无可替代的存在,所以,投入时间研究 Spring 源码的收益是很高的。

你是否曾经也有过很多次想读 Spring 源码的冲动,一头扎进 Spring 的源码。但是由于 Spring 项目太过庞大,封装层次之深,导致你只见树木,不见森林,在源码当中迷失?

在我刚工作的几年时间里,我也碰到过类似的问题。根本原因其实是我不知道该如何阅读源码,没有找到阅读源码的技巧和方法。
而对源码的理解和掌握,除了能让我们在工作中更优雅、理透彻的解决技术问题外,还能在面试时 show 一把,多要点 money。
所以,学会阅读源码是我们程序员生涯的必修课!

从 13 年到现在,我已经工作 8 年的时间了,学历普通的我凭借着对技术的执着和实力,一路从外包 --> 中小公司 --> BAT一线互联网公司。我觉得我有必要分享一下我在源码阅读方面的技巧和经验。一方面总结和梳理一下知识,形成体系;另一方面,希望可以和更多同路人交流,共同进步。

正文

本文不会直接开讲 Spring 的代码,而是讲述一下阅读源码的个人体会与心得。关于 Spring 源码的深入学习和解读,请关注我后续的文章。

话不多说,直接上干货。

阅读源码的步骤

  • 1、准备一个纯净的工程

    什么是一个纯净的工程?
    答:指一个新建的,没有业务代码的工程。里面只保留让框架运行起来的代码和配置。这样的工程更有利于我们研究框架的特性和逻辑。

    为什么不能在一个复杂的企业级项目里面直接看源码?
    答:因为,在一个复杂的工程里面,干扰项太多了。比如:大量的配置文件、配置类、权限校验、环境限制、数据库。这些因素都不利于我们分析框架的特性,在走读代码或者调试代码的过程中,分有很多不影响大局的分支与旁路逻辑,这些我们是没有必要关注的,这些只会消耗我们的精力与热情。

  • 2、想好自己要研究框架的什么特性,带着问题去看源码
    为什么要单一的研究框架的某一种特性?
    答:因为 Spring 框架太过庞大,如果你啥啥都想一下子了解,那么很容易抓不住重点。最终花了很长时间去投入,收获却很少,感觉看了就忘记了。这样,对自己的自信心也有很大的打击。所以,我们要找准了一个点出发,在持续的一段时间内都只研究这一个点。

    为什么要带着问题去看源码?
    答:在我们想好了研究框架的某个特性的时候,不防先想想,如果是自己来实现这样的特性的话,自己会怎么去思考和设计。
    框架的作者同我们一样,也是人,也是一个程序员,在写出这样优秀的代码之前,肯定也会思考我们想过的问题。这样看源码的效果将会事半功倍。而且看完源码的实现后,可能会惊奇的发现,作者的思路和自己不谋而合。这样也会极大的提升自己的信心和看源码的乐趣。

  • 3、从入口函数开始,慢慢理清脉络

    为什么要从入口函数开始?

    答:在我们对框架还不够熟悉的情况下,如果一上来随便找到一个类就开始看,经常会摸不到头绪,不知道前因后果,最后就会忘记了初心和本来的目的。我们的目标是要从理论方面整体的了解这个框架,那就应该知道框架的入口是在哪里。像盖房子一样,首先应该打地基,再住上盖。等到我们对框架渐渐熟悉之后,就可以得心应手,直接从关键点开始就可以了。

  • 4、适当的做好笔记
    俗话说,好记性不如烂笔头。而且读源码不是一遍就能完全理解的,通常都要读好多遍。我们可以将读源码的收获,都记录下。那么下一次再读的时候,也会轻松很多。在碰到问题的时候,如果刚好需要通过调试源码才能解决的话,我们就可以通过笔记快速定位到关键代码并打好断点。
    书读百遍,其意自现。读源码也一样,每一遍给你带来的感受和收获都是不同的。

  • 5、要有耐心和毅力

    看源码本身是很枯燥的。刚开始没掌握技巧的时候,可能我们忙活了大半天,也没有什么收获。很多人在一次次自信心的打击下,可能就放弃了。其实,勤学如春起之苗,不见其长,日有所增。只是很多人没能坚持。所以,一定要有耐心和毅力。

小结

本文主要介绍了阅读源码的步骤和技巧:

1、准备一个纯净的工程
2、想好自己要研究框架的什么特性,带着问题去看源码
3、从入口函数开始,慢慢理清脉络
4、适当的做好笔记
5、要有耐心和毅力


如果本文对你有所帮助,欢迎点赞收藏!

源码测试工程下载:
老王读Spring IoC源码分析&测试代码下载
老王读Spring AOP源码分析&测试代码下载

公众号后台回复:下载IoC 或者 下载AOP 可以免费下载源码测试工程…

阅读更多文章,请关注公众号: 老王学源码
gzh


系列博文:
【老王读Spring IoC-0】Spring IoC 引入
【老王读Spring IoC-1】IoC 之控制反转引入
【老王读Spring IoC-2】IoC 之 BeanDefinition 扫描注册
【老王读Spring IoC-3】Spring bean 的创建过程
【老王读Spring IoC-4】IoC 之依赖注入原理
【老王读Spring IoC-5】Spring IoC 小结——控制反转、依赖注入

相关阅读:
【Spring源码三千问】@Resource 与 @Autowired 的区别
【Spring源码三千问】bean name 的生成规则
【Spring源码三千问】BeanDefinition详细分析
【Spring源码三千问】Spring 是怎样解决循环依赖问题的?
【Spring源码三千问】哪些循环依赖问题Spring解决不了?
【Spring源码三千问】@Lazy为什么可以解决特殊的循环依赖问题?
【Spring源码三千问】BeanDefinition注册、Bean注册、Dependency注册有什么区别?
【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
【Spring源码三千问】为什么要用三级缓存来解决循环依赖问题?二级缓存行不行?一级缓存行不行?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老王学源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值