Ngbatis源码中DaoResourceLoader如何为?
摘要:Ngbatis 源码阅读之资源加载器 DaoResourceLoader DaoResourceLoader 是 Ngbatis 的资源文件加载器,扩展自 MapperResourceLoader。本篇文章主要分析这两个类。 1. 相关类
Ngbatis 源码阅读之资源加载器 DaoResourceLoader
DaoResourceLoader 是 Ngbatis 的资源文件加载器,扩展自 MapperResourceLoader。本篇文章主要分析这两个类。
1. 相关类
MapperResourceLoader
DaoResourceLoader
2. MapperResourceLoader
在介绍 DaoResourceLoader 之前有必要先介绍一下 MapperResourceLoader,DaoResourceLoader 是 MapperResourceLoader 的扩展。
MapperResourceLoader 继承了 PathMatchingResourcePatternResolver 类,关于 PathMatchingResourcePatternResolver 的有关内容,可以查看《Ngbatis源码学习之 Spring 资源管理 ResourceLoader》这篇文章。
2.1. load
MapperResourceLoader 的作用是加载解析开发人员自定义的 XML 文件资源,核心是 load() 方法。具体方法如下:
/**
* 加载多个开发者自建的 XXXDao.xml 资源。
*
* @return 所有 XXXDao 的全限定名 与 当前接口所对应 XXXDao.xml 解析后的全部信息
*/
@TimeLog(name = "xml-load", explain = "mappers xml load completed : {} ms")
public Map<String, ClassModel> load() {
Map<String, ClassModel> resultClassModel = new HashMap<>();
try {
// 加载 Resource 资源
Resource[] resources = getResources(parseConfig.getMapperLocations());
// 遍历资源并逐一解析
for (Resource resource : resources) {
resultClassModel.putAll(parseClassModel(resource));
}
} catch (IOException | NoSuchMethodException e) {
throw new ResourceLoadException(e);
}
// 返回解析 xml 后的全部信息
return resultClassModel;
}
可以看到在 load() 方法中首先调用 PathMatchingResourcePatternResolver 类的 getResources 方法加载指定文件夹位置下的所有 xml 文件,再对加载的 Resource 资源数组进行遍历,逐一对内容进行解析映射为模型类返回。
重点在 parseClassModel 方法。
