您的位置:首页 > 其它

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

2015-08-05 18:39 405 查看
文章个人学习源码所得,若存在不足或者错误之处,请大家指出。

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的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 源码 解析