Java 源码阅读 最佳实践
1. 原则
原则1:了解使用
仔细查看使用文档和说明,写较为详细的 demo 程序。
原则2:了解全局
了解该产品解决了哪些问题,并了解其周边产品及优缺点。
原则3:了解原理
查看其内部架构文档,如果有了周边产品的了解,可以从周边产品推算出其实现基本原理。不过当对其它产品了解比较深刻的时候,这个原则很容易就可以达到了。
2. 方式
单步 Debug
单步 Debug 是比直接阅读源码来得更加直观快速的方式,通过单步 Debug 的主要目的是了解整个源码的大概逻辑和流程。
- 针对应用程序(Tomcat、Hadoop):找启动脚本 -> 找到 main 入口 -> 开始 Debug
- 库、框架(FastJSON、Spring):找到关键类 -> 打断点 -> 查看堆栈
「无法 Debug?」
很多时候我们拿到的都是「无法运行」的代码,比如说构建起来很麻烦的源码、只有一个 lib 包。在这个时候只能采取一些其它手段了。
在我看来,最有效的方式还是 Debug。如果遇到了比较难构建的源码,那么暂时放弃构建它的想法,可以直接新建一个工程并添加其 Jar 包依赖,写测试代码的方式进行 Debug。至于测试代码,可以从源码的官方文档、或者它的测试用例中找到;
如果以上也是比较麻烦的话,那就直接强行裸看代码吧,不过裸看代码也有一些简便的方法让你更好的裸看代码,比如接下来的。
梳理整个工程的类依赖关系图
以 Intellij IDEA 的为例:
- 右键 Java 类
- 点击 Diagrams
- 点击 Show Diagrams
查找方法调用关系
以 Intellij IDEA 的 Mac OS X 的快捷键为例:
- Alt + F7 (Find Usage)
- Ctrl + Alt + H (Call Hierarchy)
搜索关键字
这个一般在无头绪的时候才会使用的。比如出现了框架内部的错误,里面包含了特殊关键字,如错误日志或者没有堆栈的方法。
这个在 Intellij IDEA 中比较好用,可以包含依赖的三方库进行全文搜索。快捷键:
- Ctrl + Shift + F (Find in path)
搜索三方库需要选择 Custom -> Project and Libraries
如果是 Eclipse 的话,似乎只能是大概知道是哪个 Jar 包之后,解压 source 包再全文搜索吧 = =
3. 其他
我好像就上面几个方法,看任何源码(Hadoop、Spring、Netty、公司内部的)都能够很快上手。如果想到啥或者有啥比较典型的实例的话,再补充吧。