在开始源码阅读之前,一定要使用过这个产品,了解这个产品的功能、特点。

在开始源码阅读之前,需要先明白几个事

  1. 是否足够了解
  2. 要阅读到什么程序
  3. 如何开始、从哪里开始

开始前

最好是带着问题去阅读源码,不纠结于小细节。
我一般读源码就是碰到问题后,带着问题去看,效果更好,不要想着假大空,把源码当小说一样看。
单个问题解决后,再向外延伸,就可以把一些点串起来。
最后,需要反复看一些重点部份,消失对源码的陌生感之后就会能看进去。
熟悉之后就会一种想要了解更多的感觉就会一直往下看,这个就是自动驱动的动力。

如果看不下去,不要责怪自己懒,人对看不见短期收益的事提不起兴趣这才是正常的一个人,趋利避害是正常的。
看不下去,该干嘛干,强迫自己看效果很差。不要骗自己,假装努力是在浪费时间,干IT的都很忙,看不去就看改改bug。

技巧

  1. 对说某个功能,在看之前,可以有自己的推测,想像后续的流程是如何执行的。
  2. 切一个 read_code 分支用来作注释,写上自己的见解,也方便以后再回到这块代码时能快速理解。
  3. 找到真实阅读源码的动力,如:
    • 准备跳槽、面试
    • 想了解原理
    • 解决项目中的问题
    • 装逼
  4. 跑测试用例,好的开源软件有非常详细的测试用例,可以验证到每一个细节,跑测试用例就可以让人学到不东西。
  5. 阅读后的输出整理,这个不用多说,学习就是输入 + 输出。
  6. 尽量找机会跟同事、同行讨论你看过的源码。
    • 如果你看过了,就让你装到了。
    • 如果你没看过不了解,别人帮你查缺补漏

如何阅读

从哪里开始

Spring 模块之么多、项目这么大,到哪里开始合适?
如果你是想解决问题,直接定位需要阅读的部份;
如果你是想深入了解,那有两种方式:

  1. 从关键最重要的几个概念开始,然后延伸
  2. 了解了整个框架的脉络后,从最基础的部分往上看

另外,看代码不是看小说,不是要一字一句的陷入到细节,切记。当然如果你就是喜欢这样。

测试用例

这个是我比较荐的一个方法,看完一遍之后,通过测试用例可以跟着代码走一遍,调细节。

阅读安排

打开 Spring 项目,先来罗列一下整个项目。这个可太多了,分一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
spring-aop
spring-aspects
spring-beans
spring-context
spring-context-indexer
spring-context-support
spring-core
spring-expression
spring-instrument
spring-jcl
spring-jdbc
spring-jms
spring-messaging
spring-orm
spring-oxm
spring-r2dbc
spring-test
spring-tx
spring-web
spring-webflux
spring-webmvc
spring-websocket

核心容器

spring-core
spring-beans
spring-context
spring-context-support
spring-expression

切面编程

spring-aop
spring-aspects

代理模块

spring-instrument

web

spring-web
spring-webflux
spring-webmvc
spring-websocket

从最基础的核心模块开始学习,了解最基本的原理,中间会遇到各种其它的基础知识和技术,就可以顺便拓展一下技能树。