当前位置: 首页 > 科技观察

干货:阅读几个追踪Java源码的技巧!

时间:2023-03-21 12:23:10 科技观察

今天给大家分享几个我平时阅读源码的小技巧,希望对阅读Spring、Dubbo等Java中间件等框架源码的同学有所帮助。本文基于EclipseIDE。我们日常使用的IDE其实提供了很多强大的功能。掌握它们往往能事半功倍。1.QuickTypeHierarchy快速查看类继承系统。快捷键:Ctrl+T查看类很多人可能都知道,但是在阅读源码的时候,更重要的是查看方法系统,可以方便快捷的定位到方法的实现类。例如:此时如果你想看看getBean()方法是如何实现的,你可能要失望了。结果如下:进入了BeanFactory的接口定义方法,什么都没有。此时,我们可以直接在getBean上按Ctrl+T:可以看到它实现的子类,点击子类进入即可。这种方法也适用于框架中很常见的模板方法模式,在抽象类中定义的模板方法,使用这种方法很容易找到实现类。当然还有详细的OpenTypeHierarchy会在左视图中显示更好的TypeView:2.OpenCallHierarchy打开调用层级快捷键:Ctrl+Alt+H个人认为这个是最有用的阅读工具源代码,掌握它,你可以轻松游走于各种方法调用之间。不过从我身边的朋友来看,很多人都不知道他的存在。推荐大家看看这篇文章《10个Eclipse珍藏插件推荐》。OpenCallHierachy的结果如下。调用关系清晰明了,可直接定位到调用地。3.灵活使用Debug断点在使用断点模式时,必须非常清楚F5、F6、F7、F8的功能,否则要么在源代码中迷路,要么看不清就结束了。再说说它们的作用:F5StepInto,单步进入。输入某种方法;F6StepOver,单步结束。逐行执行代码,很多人入门时只会一行一行的走;F7StepReturn,跳出释放。当进入某个方法时,如果发现这个方法没有你想看的,或者你已经看到了你想看的,直接F7,跳出该方法;F8Resume,继续执行。向下执行,遇到下一个断点就停止,否则会一直运行到最后。在调试的时候,我们可能经常会遇到loadClass的情况:第40行,我们想进入ClassPathXmlApplicationContext构造方法,没想到F5进入了类加载:熟悉类加载的同学就熟悉了,不熟悉的同学不熟悉类加载机制不要惊慌。这是一个说明你调试的类是第一次加载。这个时候我们用F7跳出类加载,回到第40行,这个时候按F5实际上会进入ClassPathXmlApplicationContext构造方法。我们在断点跟踪Spring源码的时候,一定要有节奏,首先要找到整体脉络。不要一直按F5进入每一行细看。一直F5的话,Spring几天都做不完。推荐大家看看这篇文章《10个Eclipse珍藏插件推荐》。在Spring这样的框架中精通F5、F6、F7、F8,离了解他也就不远了。调试的时候还要注意调试视图的线程栈:这个视图让你一目了然,你是怎么进去的,当前在什么方法里,等你深入的时候其他信息。也可以点击对应代码行数回车查看。综上所述,这里有几个我使用IDE跟踪源码的小技巧,尤其是第二点,非常实用,希望对大家跟踪源码的时候有所帮助。