当前位置: 首页 > 科技观察

十年阿里架构师教你如何阅读Java源码

时间:2023-03-16 17:32:15 科技观察

阅读Java源码的前提条件:1.技术基础在阅读源码之前,我们要有一定的技术基础支持。如果你没学过Java,没有其他编程语言的基础,从《Core Java》开始是很难有所收获的,尤其是《深入Java虚拟机》这样的书,别人可能觉得不错,但不一定适合现在的你。例如,许多Java源代码中都涉及设计模式。再比如,在阅读Spring源码时,需要先了解IOC、AOP、Java动态代理等知识点。2.强烈的求知欲强烈的求知欲是阅读源码的核心动力!大多数程序员的学习态度分为以下几个层次:完成自己的项目就行,遇到不懂的就百度。不仅做好项目,还要看一些与项目相关的书籍。除了阅读与项目相关的书籍外,我还会阅读一些与IT行业相关的书籍。平时,我经常浏览GitHub,寻找一些开源项目。阅读基本框架、J2EE规范、源代码。大多数程序员都是一级,达到五级的需要有强烈的求知欲。3.有足够的耐心,我们可以通过阅读源码学习大佬们的设计思路和技巧。也可以把我们一些零散的知识点整合起来,使之掌握。总之,阅读源码的好处很多,想必大家都知道。但是当你真的把这么庞大复杂的代码摆在眼前时,你肯定会在阅读的过程中卡住,就像掉进了一个巨大的迷宫。如果你想在这个巨大的迷宫中找到出路,那么就需要明确整个迷宫的整体结构,比如:API结构,框架的设计图。而且要理解它的核心思想确实不容易。刚开始阅读源码的时候肯定会很痛苦,所以没有足够的耐心是万万不行的。如何阅读Java源码:组长也是经历过阅读源码各种痛苦的人。他有一些成功的经验。今天就跟大家分享一下。如果你已经有一年左右的Java开发经验,那么你就具备了阅读Java源码的技术基础。1、建议从JDK源码开始阅读,直接与eclipse集成,无需任何配置。可以从JDK工具包入手,也就是我们学习的?的Java版本,比如List接口和ArrayList,LinkedList实现,HashMap和TreeMap等,这些数据结构中也涉及到排序等算法,杀两个鸟一石。面试的时候考官总喜欢问ArrayList和Vector的区别。如果你花10分钟阅读源代码,你一生都不会忘记它。然后是核心包,也就是String、StringBuffer等,如果有一定的JavaIO基础,不妨看看FileReader等类。我建议你看看《Java In A Nutshell》,里面有整个JavaIO的架构图。JavaIO类库,如果不了解它的接口和继承关系,阅读时总会一头雾水。我认为JavaIO包是继承和接口的最优雅示例。如果以后做架构师,肯定会经常和它打交道,比如项目中部署和配置相关的核心类的开发。阅读这些源码时,只需要了解一些核心类,比如类似于ArrayList的二十、三十个类。对于每个类,没有必要了解每个方法。有些方法像String已经到了虚拟机层(nativemethod),比如hashCode方法。当然,如果你有兴趣,可以看看JRockit的源码,同一套API,两种实现,很有意思。想再钻的话,不妨看看虚拟机的那套代码,比如SystemClassLoader的原理,JDK包里没有,JDK是基于它的。JDK的源代码Zip包只有10M左右,好像有50M左右,Sun下载了,但是很隐秘。我很高兴能自己找到并阅读它。2、JavaWeb项目源码阅读步骤:表结构→web.xml→mvc→db→springioc→log→代码①首先了解项目数据库的表结构。这方面是最容易忘记的。在不了解数据库之间的主键和外键关联的情况下,方法如何工作。其实先了解数据库表结构,再看一个方法的实现会更容易。②然后需要通过web.xml了解项目中使用了哪些拦截器、监听器、过滤器、配置文件。如果是拦截器,一般负责过滤请求,执行AOP等;如果是listener,可能是定时任务,初始化任务;配置文件就像使用spring后读取mvc相关,db相关,service相关,aop相关的文件。③查看拦截器和监听器代码,可以知道拦截了哪些请求,这个类完成了什么样的工作。因为少了这一步,有些人自己写了一个action,配置文件写对了,但是怎么调试都进不去action,直到有人告诉他们请求被阻塞了。④接下来看配置文件。首先肯定和MVC有关。比如springmvc中,要请求哪些request是静态资源,使用哪些视图策略,controller注解放在哪个package等。然后还有db相关的配置文件,看用的是什么数据库,什么ORM使用的框架,是否启用二级缓存,使用哪个产品作为二级缓存,事务管理处理,需要扫描的实体类放在哪里。***是springcore的ioc功能相关的配置文件,知道接口的大致注入和具体的类。当然还有一些配置文件比如apectj等,也是在这一步完成的。⑤日志相关文件,每一级日志如何处理,日志用于记录日志的位置。⑥从以上几点了解了整个开源项目的总体框架后,阅读每个方法就不再那么困难了。⑦当然,如果项目有配套的开发文档,也一定要看。3、Java框架源码阅读当然是Spring、MyBatis等框架。阅读Spring源码之前,必须先阅读《J2EEDesign and Development》这本书,这就是Spring的设计思想。注意,不是汉化版,汉化版完全毁了。要想阅读MyBatis的源码,首先要了解它的一些概念,否则什么都不懂。很多人会选择买一些书来帮助自己阅读,这当然是可取的。然后不想的话可以去官网看看它的介绍(MyBatis官网:http://www.mybatis.org/mybatis-3/zh/getting-started.html),组长也按照官网的介绍。阅读源代码。组长认为MyBatis的亮点在于SQL语句的管理。总结一下,没有人能从一开始就看懂源码。我们都是从0开始,没有捷径可寻。只是看我们谁愿意花时间研究,谁的求知欲更强,谁更有耐心。在阅读源码的过程中,我们的能力肯定会有所提高,也能从中学到很多东西。做项目的时候就会体现出来,确实会比以前顺畅很多。