关于java:分享一些阅读Java相关框架源码的经验

48次阅读

共计 1732 个字符,预计需要花费 5 分钟才能阅读完成。

昨天和局部网友进行了线上的交换,交换中有不少网友提到浏览源码比拟难,不晓得怎么上手。胖哥分享了一些集体教训,这里总结一下。

浏览源码实际上是 Debug 源码

其实所谓的浏览源码并不是单纯的浏览,而是调试源码。光看不入手,啥也不会有。调试源码我个别会从这几个方面着手。

样例和单元测试

很多源码都是 samples 样例我的项目以及单元测试,你能够从这些可执行的代码动手。例如 Spring Authorization Server 中的单元测试和样例。

这种样例和单元测试都非常容易,能够作为上手入门我的项目。

器重日志

日志作为理解逻辑执行的记录,每个程序员都应该晓得它的重要性。线上故障排除,大多都靠日志来定位追踪,因而在看源码的时候更应该去看日志。学会看日志,器重日志不仅仅对看源码有帮忙,对日常开发也很有帮忙。一个优良的开发者肯定是一个优良的日志阅读者,所以你要把看日志这个事器重起来。

指标明确

浏览的时候肯定要有指标地去浏览,比方明天的浏览是为了搞清楚某个类的初始化流程,或者弄明确某个机制等等。不在这个指标之内的细节和概念都能够先放到一边,比方上面的这个片段:

我只想单纯理解这个过滤器的过滤流程,我就把它的流程标记分明,我不会去纠结每一行的细节。细节外面还有细节,这样你就陷入了有限的细节之中了。理解整体流程了之后,再去看关键步骤的细节,比方外面的 步骤②。以 搞清楚步骤②为指标再去理解 AuthenticationConverter 的机制。而后我只看AuthenticationConverter,其它的同样不关怀。如法炮制把几个步骤都搞明确,而后串起来就相当于把整个流程的细节给搞清楚了。

先看形象再看实现

灵便的 Java 框架都是面向接口编程,这个接口形象了什么肯定要搞清楚,接口个别会有一个到几个办法,例如 AuthenticationProvider 只有两个办法:

如果我当初也不晓得它干嘛的,我要搞明确它,我应该怎么动手?我是这么干的:

  • 先看正文,看作者的设计用意,这个比调试重要,好的源码都有具体的正文,包含从命名上,一些词汇都能反映这个货色是干嘛的。
  • 再看每个办法的入参和返回值,理解这些返回值的详细信息。
  • 看谁援用了这个形象接口。
  • 最初再看看它都有哪些实现。
    依据下面几个步骤理解的一些信息,打一些断点,去察看剖析。

学会拆解指标

很多人上来就要钻研什么 Spring Bean 生命周期,Spring Boot启动流程,这个太过于巨大了,不是一时半会可能把握的。你要把这个大指标拆成很多的小指标。比方 Spring Bean 是如何注册的?注册前干了什么?注册后干了什么?一个一个来,分而治之,最初把它们串起来。这样岂但升高了难度,而且进步了成就感。你看见他人写的一文搞定 XXXX,文章是一文,可他剖析的工夫可不止一天,很多都是几个指标的成绩汇总。

拆解指标在任何工作中都十分有用,学会了之后收益无穷。

必须总结

笔记是必须的,我没有见过不记笔记的大牛。编程这货色靠的不是死记硬背。新框架层出不穷,新概念突飞猛进,你脑子记得住?反正我是记不住,包含 Spring Security 的货色我都记不住。不过我会记笔记啊,又不是闭卷考试,用失去时候翻一翻,又回来了。这里举荐应用markdown,语法简略,排版有条理。能够说我所有的创作都是markdown

一些调试技巧

其它的我临时想不到,这里就分享一些 IDEA 调试技巧。

学会看调用帧

学会看上面这个Frames

这个要从下往上看,这是你执行的一些代码的记录帧,你能够用鼠标选中查看每一帧的执行状况。

这有点像视频剪辑,找到关键帧去解决一些货色。

减少 Watches

选中一个变量,Add to Watches,你就能够在整个流程中察看这个变量的变动状况,生命周期。多用于察看一些要害参数。

表达式操作

你还能够选中一个变量,按下 Alt+F8 后就能够在对话框中操作这个变量,比方获取以后的属性,别只会System.out.println!就像上面的一样:

你还能够通过它提供的办法来扭转一些值,来验证你的一些推断。

总结

源码剖析能力是你进阶的要害。调包每个开发都会,可能掌控自若的永远都是那些长于钻研的人。

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn

正文完
 0