乐趣区

看阿里P7架构师是如何阅读源码

程序员每天都在和代码打交道,经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不多数,会读代码且读懂大项目源码的,少之又少,这也造成了很多错误看源码的方式。
那要如何正确的分析源码呢?
今天跟大家分享一下我平时阅读源码的几个技巧,对于阅读 java 中间件,如 Spring、Dubbo 等框架源码的程序员们有一定帮助。本文基于 Eclipse IDE,我们每天都使用的 IDE,其实它有很多强大的功能,掌握它们,往往能够事半功倍。
1、Quick Type Hierarchy 快速查看类继承体系。
快捷键:Ctrl + T

查看类很多人可能都知道,可源码阅读的时候更多用来查看方法体系更重要,可以方便快速的定位到方法的实现类。如:

此时如果想查看 getBean() 方法如何实现,可能会让你失望。结果如下:

进入到了 BeanFactory 的接口定义方法,什么也没有。
此时我们直接在 getBean 上 Ctrl+T:

可以看到其实现的子类,点击子类进去即可。此方法还适用于框架中非常常见的模板方法模式,在抽象类中定义的模板方法,用这招轻松找到实现类。
当然还有详细的 Open Type Hierarchy

会在左侧视图里面展示更好的 Type View:

2、Open Call Hierachy 打开调用层级
快捷键:Ctrl+Alt+H

个人认为这是阅读源码最有用的利器,掌握它,可以轻松游走于各种方法调用之间,然而从我身边的朋友来看,很多人都不知道它的存在。
Open Call Hierachy 查看结果如下,调用关系清晰明朗,可以直接定位到调用的地方。

3、Debug 断点的灵活使用
断点调式时,心中必须很清楚 F5、F6、F7、F8 的作用,不然要么迷失于源码之中,要么什么都没看清就走完了。
再次啰嗦一下它们的作用:

F5 Step Into,单步进入。进入到某个方法里面;
F6 Step Over,单步结束。一行一行的执行代码,入门时很多人只会一行一行走;
F7 Step Return,跳出放发。进入到某个方法里面时,如果发现这个方法没有你想看的东西,或者已经看到了你想看的,直接 F7,跳出到方法外。
F8 Resume,继续往下执行。往下执行,遇到下一个断点时再停下来,没有则一直运行完。

调试时我们可能会经常遇到 loadClass 的情况:

在 40 行想进入 ClassPathXmlApplicationContext 构造方法,F5 不料进入了类加载:

熟悉类加载的同学会很熟悉,不熟悉类加载机制的也不要慌,这是说明你调试的类第一次被加载,这时候我们 F7 跳出类加载,回到 40 行。

这个时候再按 F5 会真正进入 ClassPathXmlApplicationContext 构造方法。
当我们断点跟踪 Spring 这种源码的时候,一定要有节奏,以优先找到整体脉络为准,不要一直的 F5 进入每一行细看,F5 下去,几天都走不完 Spring。能熟练在 Spring 这种框架中 F5、F6、F7、F8,就离弄懂它不远了。
Dubug 的时候还应该注意 debug 视图的线程栈:

这个视图能够让你在走得比较深的时候,可以一眼看出自己怎么进来的,当前位于什么方法里等信息,还可以点击对应的代码行数进入查看。
总结,这是我使用 IDE 跟踪源码的几个小技巧,尤其是第二点,是很实用的,希望对大家在进行源码跟踪时有一定帮助。看了这么多的源码,我对这些技术点进行了一个系统的整理,想要学会如何阅读源码,提升进阶的朋友们可以来下载资料,加君羊:854601507,欢迎加群免费领取一起学习,相互讨论。

分享这份源码分析图给大家,希望对大家有所帮助,架构师很漫长,一起共勉吧!
仅以身边朋友的一次成长经历分享给喜欢 Java,喜欢编程,有梦想成为架构师的程序员们,希望能够帮助到你们。

退出移动版