阅读本文大概须要 3.6 分钟。html
在阅读源码以前,咱们要有必定程度的技术基础的支持。程序员
假如你历来都没有学过Java,也没有其它编程语言的基础,上来就啃《Core Java》,那样是很难有收获的,尤为是《深刻Java虚拟机》这类书,或许别人以为好,可是未必适合如今的你。web
好比设计模式,许多Java源码当中都会涉及到。再好比阅读Spring源码的时候,势必要先对IOC,AOP,Java动态代理等知识点有所了解。面试
强烈的求知欲是阅读源码的核心动力!算法
大多数程序员的学习态度分为以下几个层次:spring
完成本身的项目就能够了,遇到不懂的地方就百度一下。shell
不只作好项目,还会去阅读一些和项目有关的书籍。数据库
除了阅读和项目相关的书籍以外,还会阅读一些IT行业相关的书籍。编程
平时会常常逛逛GitHub,找一些开源项目看看。设计模式
阅读基础框架、J2EE规范、源码。
大多数程序员的层次都是在第一层,到第五层的人就须要有强烈的求知欲了。
经过阅读源码咱们能够学习大佬的设计思路,技巧。还能够把咱们一些零碎的知识点整合起来,从而融会贯通。总之阅读源码的好处多多,想必你们也清楚。
可是真的把那么庞大复杂的代码放到你的眼前时,确定会在阅读的过程当中卡住,就如同陷入了一个巨大的迷宫,若是想要在这个巨大的迷宫中找到一条出路,那就须要把整个迷宫的总体结构弄清楚,好比:API结构、框架的设计图。并且还有理解它的核心思想,确实很不容易。
刚开始阅读源码的时候确定会很痛苦,因此,没有足够的耐心是万万不行的。
团长也是经历过阅读源码种种痛苦的人,算是有一些成功的经验吧,今天来给你们分享一下。
若是你已经有了一年左右的Java开发经验的话,那么你就有阅读Java源码的技术基础了。
能够从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公司有下载的,不过很隐秘。我曾经为本身找到、读过它很兴奋了一阵。
步骤:表结构 → 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记录日志。
⑥ 从上面几点后知道了整个开源项目的总体框架,阅读每一个方法就再也不那么难了。
⑦ 固然若是有项目配套的开发文档也是要阅读的。
固然了,就是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
往期精彩回顾