初衷:1.总结方便以后复习
2.百度的各种文章太零散且多为复制粘贴(各种水经验等恶心人操作)
先从简单加载语句 渐入源码(上图为复制来的)
重点:因为源码build模式底层会构建非常多对象,所以我会单行代码分析到结尾,探究这一行代码底层究竟做了什么事,如果要全部分析整个加载过程,内容会非常多。后期可能会继续写文章(虽然个人觉得非常麻烦)。
一. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
build(inputStream)方法最终会执行我框起来的这一块。而且另外两个形参为空。实际只有reader形参有值
委托XMLConfigBuilder来解析xml文件,并构建,追进new XMLConfigBuilder(..);
1. 这里我们看到此处又 new XMLMapperEntityResolver() 这里只是构建对象,这个类先不管它是干嘛的,后面用到会详解。
2.追进new XpathParser(..)
晕了吗?一个对象各种调用?这里形参 reader(配置文件转换的流),validation=true,variables=null,entityResolver(上上个图new的对象)
接下来追进commonConstructor(..)
到这里 这个类里面的属性开始赋值了(值是什么就不用我多说了)下面 追进newInstance()方法
框框的 if()语句不会执行
这块重点记住返回了一个xpathFactory,我们后面可以推测这块代码做了什么事情
这一块,我也不清楚做了什么,只知道是XPathParser类的xpath属性赋值了,后面用到的话,我们可以反推猜测这个属性到底干嘛用
到这里这个箭头的方法 就调用结束了 ,createDocument(..)方法,看名字意思是创建Document,形参是配置文件转换的流对象,这里我也只能推测是把 流转换成了某个特定的映射对象
所以XPathParser的document属性 现在有值了,是流转换成的映射对象
后期代码能力上升,可能会单独开一篇文章去解读,这块转换到底如何做到的
开始追进去的构造方法是最上面这个,然后会合并到最后这个构造方法,横线处的形参为null
这里调用了super构造器
写到这我觉得好累,因为其中各种调用还有一些难以解读的源码。有点想水过去了
箭头的这个我就不追进去了,读者可以试着自己追进去看看,相比之前的源码更容易懂
此时XMLConfigBuilder类的parser属性 可以找到 刚刚 xml文件转换成流--再转换成Document对象等等操作后的各种属性(这里建议读者阅读源码时候做笔记,不然难理解我说的)
这个方法结束,就回到了下图,下面开始走箭头这行代码(不得不吐槽真xx复杂)
这里更是复杂。。代码量众多,下一篇文章继续追进吧。。



