当前位置: 首页 > 后端技术 > Java

分享阅读Java相关框架源码的一些心得

时间:2023-04-02 00:37:00 Java

昨天和一些网友进行了在线交流。交流过程中,不少网友提到源码阅读困难,不知如何入门。胖哥分享了一些个人经验,总结到这里。阅读源码其实就是Debug源码。其实所谓的阅读源码并不是简单的阅读,而是调试源码。如果你看不到它,你将一无所有。我在调试源码的时候一般都是从这几个方面入手。示例和单元测试许多源代码都是示例示例项目和单元测试,您可以从这些可执行代码开始。例如SpringAuthorizationServer中的单元测试和示例。这种样例和单元测试非常简单,可以作为入门项目。重视LoggingLogging作为理解逻辑执行的记录,每个程序员都应该知道它的重要性。大部分在线排查问题都是靠日志来定位和追踪的,所以看源码的时候应该看日志。学会阅读日志,关注日志不仅对查看源码有帮助,对日常开发也有帮助。优秀的开发者一定是优秀的日志阅读者,所以阅读日志要注意。带着明确的目标读书,一定要带着目标去读书。比如今天的阅读是想搞清楚某个类的初始化过程,或者搞清楚某个机制等,不在这个目标范围内的细节和概念可以先放一边,比如下面这个片段:Ijust想简单了解一下这个filter的过滤过程,我就把它的过程标注清楚,就不去纠结每一行的细节了。细节中有细节,让你陷入无限的细节之中。了解了整体流程后,进入关键步骤的细节,如步骤②。带着搞清楚步骤②的目标,去了解AuthenticationConverter的机制。那我只看AuthenticationConverter,其他的我不管。做同样的事情弄清楚几个步骤,然后把它们串起来,就相当于弄清楚了整个过程的细节。先看抽象再看实现灵活的Java框架都是面向接口的编程。您必须弄清楚接口抽象了什么。通常,接口有一个或几个方法。比如AuthenticationProvider只有两个方法:如果我现在不知道为什么,我想搞清楚,我应该如何开始?我是这样做的:先看评论,看作者的设计意图。这比调试更重要。好的源码都有详细的注释,包括命名,还有一些词汇可以体现这个东西是干什么的。查看每个方法的输入参数和返回值,了解这些返回值的细节。查看谁引用了这个抽象接口。最后,让我们看看它实现了什么。根据以上步骤了解到的一些信息,设置一些断点进行观察分析。学习分解目标。很多人上来就是为了研究SpringBean的生命周期和SpringBoot的启动过程。这太宏大了,短时间内是掌握不了的。你要把这个大目标分解成很多小目标。比如SpringBean是怎么注册的?注册前做了什么?注册后做了什么?一个一个来,分而治之,最后串起来。这样既降低了难度,又提高了成就感。你看别人写文章得到XXXX。文章是一篇文章,但是他的分析需要一天多的时间,而且很多都是几个目标的结果总结。拆除目标在任何工作中都非常有用,一旦学会它就会非常有益。有必要总结笔记。没见过不做笔记的大牛。编程不是死记硬背。新的框架层出不穷,新的概念日新月异。你记得吗?反正记不清了,包括SpringSecurity。但是我会做笔记,而且不是闭卷考试。当我需要它时,我会查找它并返回。这里推荐使用markdown,语法简单,布局有条理。可以说我所有的创作都是markdown。其他的一些调试技巧我暂时想不起来了,这里就介绍一些IDEA的调试技巧。学会看callframe,学会看followingFrames:这个应该是自底向上看的。这是您执行的一些代码的记录帧。可以用鼠标选择查看每一帧的执行情况。这有点像剪辑视频,找到关键帧来处理一些东西。AddWatches选择一个变量,AddtoWatches,可以观察这个变量在整个过程、生命周期中的变化。多用于观察一些关键参数。对于表达式操作,也可以选中一个变量,按Alt+F8在对话框中操作这个变量,比如获取当前属性,不要只是System.out.println!就像下面这样:你也可以通过它提供的方法改变一些值来验证你的一些推论。总结源代码分析能力是你进步的关键。每一次开发都会切换包,能驾驭的永远是善于研究的人。关注公众号:Felordcn获取更多资讯个人博客:https://felord.cn