学习源码的建议
很多人说要看源码,但看起来又不知道从哪下手。分享一下我看源码的经验。
什么时候该看源码
不要一开始就看源码
你刚学Java,就去看Spring的源码,肯定看不懂,而且浪费时间。
先把框架用熟了,理解它的设计思想,再去看源码。
这些情况适合看源码:
- 你用某个框架/库已经很熟练了,想深入理解
- 你遇到了Bug,看文档解决不了,需要看源码排查
- 面试要求你讲某个框架的原理
- 你想学习优秀代码的写法
怎么看源码
1. 先了解整体架构
不要一上来就钻进细节。先看看项目的整体结构:
- 有哪些模块?
- 各个模块负责什么?
- 模块之间怎么交互?
可以看官方文档的架构介绍,或者搜索"xxx源码分析"的文章。
2. 带着问题去看
漫无目的地看源码效率很低。
带着问题去看效果好很多。比如:
- Spring的IoC容器是怎么工作的?
- MyBatis是怎么把SQL结果映射成对象的?
- HashMap的put方法具体做了什么?
有了问题,你就知道该看哪部分代码了。
3. Debug跟踪
把项目跑起来,打断点,一步一步跟着走。
这比光看代码有效多了。你能看到实际运行时数据是怎么流转的。
4. 画图
看源码的时候画画图:
- 类之间的关系
- 方法调用的流程
- 数据的流转
画图能帮助你理清思路,也方便以后复习。
5. 做笔记
看完一部分,记下来:
- 这部分代码做了什么
- 关键的类和方法
- 有什么设计上的亮点
不然过几天就忘了,白看。
推荐一些适合学习的源码
入门级:
- JDK集合框架(ArrayList、HashMap):代码量不大,设计经典
- Guava:Google出品的Java工具库,代码质量很高
进阶级:
- Spring IoC:Spring的核心,理解了这个其他都好说
- MyBatis:ORM框架,代码结构清晰
- Netty:网络编程框架,想学网络编程必看
高级:
- Spring MVC
- Dubbo
- RocketMQ
看源码的常见坑
1. 想一次看完
源码很多,想一次看完是不可能的。
每次看一小部分,搞懂一个问题就行。
2. 每个细节都想搞懂
有些细节不重要,不用死磕。
先把主干流程搞懂,细节以后用到再看。
3. 只看不写
看完源码,尝试自己实现一个简化版。
比如看完HashMap源码,自己写一个简单的HashMap。这样理解会更深刻。
最后
看源码不是必须的,但能让你从"会用"变成"精通"。
不用着急,等你用框架用熟了,再慢慢看源码。
