如何阅读Java源码?

阅读本文大概须要 3.6 分钟。html

阅读Java源码的前提条件:

一、技术基础

在阅读源码以前,咱们要有必定程度的技术基础的支持。程序员

假如你历来都没有学过Java,也没有其它编程语言的基础,上来就啃《Core Java》,那样是很难有收获的,尤为是《深刻Java虚拟机》这类书,或许别人以为好,可是未必适合如今的你。web

好比设计模式,许多Java源码当中都会涉及到。再好比阅读Spring源码的时候,势必要先对IOC,AOP,Java动态代理等知识点有所了解。面试

二、强烈的求知欲

强烈的求知欲是阅读源码的核心动力!算法

大多数程序员的学习态度分为以下几个层次:spring

  1. 完成本身的项目就能够了,遇到不懂的地方就百度一下。shell

  2. 不只作好项目,还会去阅读一些和项目有关的书籍。数据库

  3. 除了阅读和项目相关的书籍以外,还会阅读一些IT行业相关的书籍。编程

  4. 平时会常常逛逛GitHub,找一些开源项目看看。设计模式

  5. 阅读基础框架、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/mybatis-3/zh/getting-started.html),团长也是按照官网上面的介绍来进行源码阅读的。团长认为MyBatis的亮点就是管理SQL语句。

总结

没有人一开始就能够看得懂那些源码,咱们都是从0开始的,并且没有什么捷径可寻,无非就是看咱们谁愿意花时间去研究,谁的求知欲更强烈,谁更有耐心。阅读源码的过程当中咱们的能力确定会提高,能够从中学到不少东西。在咱们作项目的时候就会体现出来了,的确会比之前顺手不少。



·END·

程序员的成长之路

路虽远,行则必至

本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。

微信ID:cxydczzl


往期精彩回顾

相关文章
相关标签/搜索