今天来分析Configuration初始化的最后一部分mapper的加载。
加载方法mapperElement
XMLConfigBuilder配置Configuration的parseConfiguration方法还剩最后一行解析代码:mapperElement(root.evalNode(“mappers”));
mapperElement方法源码与详解如下图:
从源码可以得出一些结论:
mappers节点支持mapper和package两种类型子节点;
package子节点只需要name一个属性;
一个mapper子节点有且只能有url、resource、class三个属性中其中一个,否则会抛出异常;
mapperElement解析两种mappers子节点,主要代码我分成了4个部分,接下来逐一进行深入解析。
解析包方法addMappers
首先来看解析包的方法使用的是configuration的addMappers方法,方法主要是涉及到一个MapperRegistry类型的属性mapperRegistry,addMappers主要流程如下图: