源码之路
前提
- 你对它已经所有了解,在工作中使用过它。
- 你想了解它的原理、内部具体实现。
- 心态很重要,不要惧怕它,不要把它想的很难。
- 把它想得简单点,就行平时的代码一样。
- 有了信心,很多问题解决起来,有了底气,有了思路。
路程
- 找一本相关的书籍,作为总体指导大纲
- 针对一个模块看起,最好是自己熟悉的模块。
- 对这个模块是干什么的,什么作用要先了解。
- 然后再对这个模块里面每一个接口和类,是做什么的,有所了解。
- 总的浏览一下这个类的大体内容,可以结合着书的相关内容。
- 跑一下这个类的测试类,看看功能和自己预想的它的作用是否一致。
- 然后就可以仔细研究这个类里面具体的内容了。
- 这个模块结束之后,再看其他模块,最后把所有模块串联起来。
- 对项目整体有一个把控,就可以大局入手,整理了解这个项目。
- 一定做笔记,看到哪里,想到哪里,随手记录下来,后期逐步完善。
- 针对以上 3. 4. 5. 步骤,可以先从网上搜索相关内容,看到大家对他们通俗易懂的总结,更迅速的提升对模块类的认知。
- 针对以上 5. 6. 7. 步骤可能需要反复循环利用研究,直到内容研究透彻为止。
项目解读
MyBatis 项目基础 java.sql 包,java 的 JDK 动态代理、反射,java 的 配置文件的解析 XPathParser,还有 Java 基础的数据类型。
阅读开源代码的时候,是比较苦恼的,自己常用的接口、类,还是比较好理解的,到了用的不多的、然后代码比较琐碎细小,比较抽象,然后有点不像人话,更接近机器语言的代码的时候,是最痛苦的时候,比如 MyBatis 中的 XMLStatementBuilder 用来解析复杂的 mapper 配置文件,还有 DefaultResultSetHandler 处理 MyBatis 查询结果,封装成 ResultMap 或者 ResultType 对象的时候,尤其是查询结果比较复杂,有嵌套查询,一对多的情况,你就只能 Debug 模式一行一行跟代码了。然后再说一点吧,你对这个框架的名词、概念一定要彻底理解,有助于你更好的读懂代码;比如:你读一个类的时候,你最好知道它是做什么用的,之后你读起来就比较容易了。
其中 MyBatis 代码中,最难读懂的就是 mapper.xml 文件的解析,还有查询结果集的封装,都比较琐碎比较抽象,不像这个类继承基类,这个类实现了这个接口,看看方法大概就了解了。当然 MyBatis 最经典的也就是最难的了,mapper.xml文件的解析和查询结果的封装。
其中 DataSource 模块由 Druid 第三方数据源管理,Transaction 由SpringManagedTransaction 管理,然后再由剩余的模块构成了 MyBatis 主要框架。
源码系列详解
应用设计模式
源码仓库
本项目克隆了 mybatis 源码,并对类进行了详细注解。