阅读 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 分钟读读源码, 估计一辈子都忘不了.
然后是 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 公司有下载的, 不过很隐秘. 我曾经为自己找到, 读过它很兴奋了一阵.
2,Java web 项目源码阅读
步骤: 表结构 → Web.xml → mvc → db → spring IoC → log → 代码
1 先了解项目数据库的表结构, 这个方面是最容易忘记的, 有时候我们只顾着看每一个方法是怎么进行的, 却没有去了解数据库之间的主外键关联. 其实如果先了解数据库表结构, 再去看一个方法的实现会更加容易.
2 然后需要过一遍 Web.xml, 知道项目中用到了什么拦截器, 监听器, 过滤器, 拥有哪些配置文件. 如果是拦截器, 一般负责过滤请求, 进行 AOP 等; 如果是监听器, 可能是定时任务, 初始化任务; 配置文件有如 使用了 spring 后的读取 mvc 相关, db 相关, service 相关, aop 相关的文件.
3 查看拦截器, 监听器代码, 知道拦截了什么请求, 这个类完成了怎样的工作. 有的人就是因为缺少了这一步, 自己写了一个 action, 配置文件也没有写错, 但是却怎么调试也无法进入这个 action, 直到别人告诉他, 请求被拦截了.
4 接下来, 看配置文件, 首先一定是 mvc 相关的, 如 springmvc 中, 要请求哪些请求是静态资源, 使用了哪些 view 策略, controller 注解放在哪个包下等. 然后是 db 相关配置文件, 看使用了什么数据库, 使用了什么 ORM 框架, 是否开启了二级缓存, 使用哪种产品作为二级缓存, 事务管理的处理, 需要扫描的实体类放在什么位置. 最后是 spring 核心的 IoC 功能相关的配置文件, 知道接口与具体类的注入大致是怎样的. 当然还有一些如 apectj 等的配置文件, 也是在这个步骤中完成.
5 log 相关文件, 日志的各个级别是如何处理的, 在哪些地方使用了 log 记录日志.
6 从上面几点后知道了整个开源项目的整体框架, 阅读每个方法就不再那么难了.
7 当然如果有项目配套的开发文档也是要阅读的.
3,Java 框架源码阅读
当然了, 就是 Spring,MyBatis 这类框架.
在读 Spring 源码前, 一定要先看看《J2EE
Design and Development》这本书, 它是 Spring 的设计思路. 注意, 不是中文版, 中文版完全被糟蹋了.
想要阅读 MyBatis 的源码就要先了解它的一些概念, 否则云里来雾里去的什么也不懂. 有很多人会选择去买一些书籍来帮助阅读, 当然这是可取的. 那么如果不想的话, 就可以去官网查看它的介绍 (MyBatis 网站: http://www.mybatis.org/mybatis-3/zh/getting-started.html), 团长也是按照官网上面的介绍来进行源码阅读的. 团长认为 MyBatis 的亮点就是管理 SQL 语句.
总结
没有人一开始就可以看得懂那些源码, 我们都是从 0 开始的, 而且没有什么捷径可寻, 无非就是看我们谁愿意花时间去研究, 谁的求知欲更强烈, 谁更有耐心. 阅读源码的过程中我们的能力肯定会提升, 可以从中学到很多东西. 在我们做项目的时候就会体现出来了, 的确会比以前顺手很多.
来源: http://news.51cto.com/art/201902/592361.htm