Mybatis 源码解析(一) - Configuration.xml加载

文章个人学习源码所得,若存在不足或者错误之处,请大家指出。

Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设计以及结果集的检索。Mybatis的前身是ibatis,ibatis是2002年发起的一个开源项目,2010年被谷歌托管,更名为Mybatis,2013年迁移至Github。可能会看本篇文章的人,对于Mybatis都会有一定程度的了解和应用,在此就不做过多介绍了,直接入主题。

Mybatis的入口点是Configuration.xml配置文件加载,Mybatis源码中org.apache.ibatis.io包下负责文件的读取,将本地文件以Reader(字符)或者InputStream(字节)的方式读入内存,接下来我们看一下Mybatis是如何实现Configuration.xml读取的。
在Configuration.xml加载的过程中,Resources、ClassLoaderWrapper等类参与其中,时序图如下,下图只是简单介绍了一下大致流程:
这里写图片描述
1.Resources类
Resources类是Mybatis为文件读取提供的框架内接口,所有文件的读取都要通过Resources类来完成,这也正是面向对象的特征之一——封装,降低直接类之间的耦合度。
Resources类方法签名:
这里写图片描述
Resources类内部提供了一些列的static方法,其中最主要的几个方法签名是:

getResourceURL(ClassLoader, String)
getResourceAsStream(ClassLoader, String)
getResourceAsProperties(ClassLoader, String)
getResourceAsReader(ClassLoader, String)
getResourceAsFile(ClassLoader, String)

以上几个不同签名的static方法,提供了文件在内存的不同表现形式,相信每种签名方法的意义,从字面就已经很好理解了。对于加载Configuration.xml而言,最常用的就是:

getResourceAsStream(ClassLoader, String)
getResourceAsReader(ClassLoader, String)

至于为什么会用这两种方式,后面具体的Configuration.xml解析时会提到。
2.ClassLoaderWrapper类:
Resources类在文件加载的过程中,起到的作用仅仅为Mybatis框架内提供接口,并不参与真正的文件加载操作。
ClassLoaderWrapper则封装了java.lang.ClassLoader这个类,而配置文件的加载是使用ClassLoader完成的。ClassLoader是java提供对外开放的类加载机制,至于ClassLoader的详细使用,可以参照ClassLoader内部实现了解一下,在此不做详细说明。
总结:在Mybatis的内部使用了Resources和ClassLoaderWrapper这两个类封装了文件读取的操作,在内部使用这样的封装完成对文件信息的获取。
以上就Mybatis将Configuration.xml转换成Reader和InputStream的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值