如何阅读Java源码?且听阿里P7架构师的分享

31次阅读

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

阅读 Java 源码的前提条件:
一、技术基础
在阅读源码之前,我们要有一定程度的技术基础的支持。
假如你从来都没有学过 Java,也没有其它编程语言的基础,上来就啃《Core Java》,那样是很难有收获的,尤其是《深入 Java 虚拟机》这类书,或许别人觉得好,但是未必适合现在的你。
比如设计模式,许多 Java 源码当中都会涉及到。再比如阅读 Spring 源码的时候,势必要先对 IOC,AOP,Java 动态代理等知识点有所了解。
二、强烈的求知欲
强烈的求知欲是阅读源码的核心动力!
大多数程序员的学习态度分为如下几个层次:

完成自己的项目就可以了,遇到不懂的地方就百度一下。
不仅做好项目,还会去阅读一些和项目有关的书籍。
除了阅读和项目相关的书籍之外,还会阅读一些 IT 行业相关的书籍。
平时会经常逛逛 GitHub,找一些开源项目看看。
阅读基础框架、J2EE 规范、源码。

大多数程序员的层次都是在第一层,到第五层的人就需要有强烈的求知欲了。
三、足够的耐心
通过阅读源码我们可以学习大佬的设计思路,技巧。还可以把我们一些零碎的知识点整合起来,从而融会贯通。总之阅读源码的好处多多,想必大家也清楚。
但是真的把那么庞大复杂的代码放到你的眼前时,肯定会在阅读的过程中卡住,就如同陷入了一个巨大的迷宫,如果想要在这个巨大的迷宫中找到一条出路,那就需要把整个迷宫的整体结构弄清楚,比如:API 结构、框架的设计图。而且还有理解它的核心思想,确实很不容易。
刚开始阅读源码的时候肯定会很痛苦,所以,没有足够的耐心是万万不行的。

如何读 Java 源码:
团长也是经历过阅读源码种种痛苦的人,算是有一些成功的经验吧,今天来给大家分享一下。
如果你已经有了一年左右的 Java 开发经验的话,那么你就有阅读 Java 源码的技术基础了。
一、建议从 JDK 源码开始读起,这个直接和 eclipse 集成,不需要任何配置。
可以从 JDK 的工具包开始,也就是我们学的《数据结构和算法》Java 版,如 List 接口和 ArrayList、LinkedList 实现,HashMap 和 TreeMap 等。这些数据结构里也涉及到排序等算法,一举两得。
面试时,考官总喜欢问 ArrayList 和 Vector 的区别,你花 10 分钟读读源码,估计一辈子都忘不了。
然后是 core 包,也就是 String、StringBuffer 等。如果你有一定的 Java IO 基础,那么不妨读读 FileReader 等类。
建议大家看看《Java In A Nutshell》,里面有整个 Java IO 的架构图。Java IO 类库,如果不理解其各接口和继承关系,则阅读始终是一头雾水。
Java IO 包,我认为是对继承和接口运用得最优雅的案例。如果你将来做架构师,你一定会经常和它打交道,如项目中部署和配置相关的核心类开发。
读这些源码时,只需要读懂一些核心类即可,如和 ArrayList 类似的二三十个类,对于每一个类,也不一定要每个方法都读懂。像 String 有些方法已经到虚拟机层了 (native 方法),如 hashCode 方法。
当然,如果有兴趣,可以对照看看 JRockit 的源码,同一套 API,两种实现,很有意思的。
如果你再想钻的话,不妨看看针对虚拟机的那套代码,如 System ClassLoader 的原理,它不在 JDK 包里,JDK 是基于它的。JDK 的源码 Zip 包只有 10 来 M,它像是有 50 来 M,Sun 公司有下载的,不过很隐秘。我曾经为自己找到、读过它很兴奋了一阵。
二、Java Web 项目源码阅读
步骤:表结构 → web.xml → mvc → db → spring ioc → log→ 代码

先了解项目数据库的表结构,这个方面是最容易忘记的,有时候我们只顾着看每一个方法是怎么进行的,却没有去了解数据库之间的主外键关联。其实如果先了解数据库表结构,再去看一个方法的实现会更加容易。
然后需要过一遍 web.xml,知道项目中用到了什么拦截器,监听器,过滤器,拥有哪些配置文件。如果是拦截器,一般负责过滤请求,进行 AOP 等;如果是监听器,可能是定时任务,初始化任务;配置文件有如 使用了 spring 后的读取 mvc 相关,db 相关,service 相关,aop 相关的文件。
查看拦截器,监听器代码,知道拦截了什么请求,这个类完成了怎样的工作。有的人就是因为缺少了这一步,自己写了一个 action,配置文件也没有写错,但是却怎么调试也无法进入这个 action,直到别人告诉他,请求被拦截了。
接下来,看配置文件,首先一定是 mvc 相关的,如 springmvc 中,要请求哪些请求是静态资源,使用了哪些 view 策略,controller 注解放在哪个包下等。然后是 db 相关配置文件,看使用了什么数据库,使用了什么 orm 框架,是否开启了二级缓存,使用哪种产品作为二级缓存,事务管理的处理,需要扫描的实体类放在什么位置。最后是 spring 核心的 ioc 功能相关的配置文件,知道接口与具体类的注入大致是怎样的。当然还有一些如 apectj 等的配置文件,也是在这个步骤中完成。
log 相关文件,日志的各个级别是如何处理的,在哪些地方使用了 log 记录日志。
从上面几点后知道了整个开源项目的整体框架,阅读每个方法就不再那么难了。
当然如果有项目配套的开发文档也是要阅读的。

三、Java 框架源码阅读
当然了,就是 Spring、MyBatis 这类框架。
在读 Spring 源码前,一定要先看看《J2EE Design and Development》这本书,它是 Spring 的设计思路。注意,不是中文版,中文版完全被糟蹋了。
想要阅读 MyBatis 的源码就要先了解它的一些概念,否则云里来雾里去的什么也不懂。有很多人会选择去买一些书籍来帮助阅读,当然这是可取的。那么如果不想的话,就可以去官网查看它的介绍(MyBatis 网站:http://www.mybatis.org/mybati…)。
总结
没有人一开始就可以看得懂那些源码,我们都是从 0 开始的,而且没有什么捷径可寻,无非就是看我们谁愿意花时间去研究,谁的求知欲更强烈,谁更有耐心。阅读源码的过程中我们的能力肯定会提升,可以从中学到很多东西。在我们做项目的时候就会体现出来了,的确会比以前顺手很多。

正文完
 0