昨晚和部份网民展开了线上的沟通交流,沟通交流许多网民提及写作源码较为难,不晓得如何入门。马哥撷取了许多对个人实战经验,这儿归纳呵呵。

写作源码事实上是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!就像下面的一样:

你还能通过它提供的方法来改变许多值,来验证你的许多推断。

归纳

马哥源码分析能力是你进阶的关键。调包每个开发都会,能够掌控自如的永远都是那些善于钻研的人。

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!