网站首页 > 技术文章 正文
1.XMLConfigBulder解析Settrings
XMLConfigBuilder的parseConfiguration方法中解析settings包括四个步骤
- 获取Document中的settings节点并转换为Properties对象
- 调用loadCustomVfs方法设置vfsImpl的值
- 调用loadCustomLogImpl方法设置logImpl的值
- 调用settingsElement方法设置settings其他配置的值
private void parseConfiguration(XNode root) {
try {
...
Properties settings = this.settingsAsProperties(root.evalNode("settings"));
this.loadCustomVfs(settings);
this.loadCustomLogImpl(settings);
...
this.settingsElement(settings);
...
} catch (Exception var3) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + var3, var3);
}
}
2.Settings节点转换为Properties
在settingsAsProperties方法中通过获取XNode的子节点信息得到settings的Properties对象
然后依次判断属性的配置是否正确
private Properties settingsAsProperties(XNode context) {
if (context == null) {
return new Properties();
} else {
Properties props = context.getChildrenAsProperties();
MetaClass metaConfig = MetaClass.forClass(Configuration.class, this.localReflectorFactory);
Iterator var4 = props.keySet().iterator();
Object key;
do {
if (!var4.hasNext()) {
return props;
}
key = var4.next();
} while(metaConfig.hasSetter(String.valueOf(key)));
throw new BuilderException("The setting " + key + " is not known. Make sure you spelled it correctly (case sensitive).");
}
}
3.加载vfs
在loadCustomVfs方法中,获取vfsImpl配置的值,如果vfs配置正确,则通过Resources类获得配置的类的class对象,并调用Configuration的setVfsImpl方法进行赋值
private void loadCustomVfs(Properties props) throws ClassNotFoundException {
String value = props.getProperty("vfsImpl");
if (value != null) {
String[] clazzes = value.split(",");
String[] var4 = clazzes;
int var5 = clazzes.length;
for(int var6 = 0; var6 < var5; ++var6) {
String clazz = var4[var6];
if (!clazz.isEmpty()) {
Class<? extends VFS> vfsImpl = Resources.classForName(clazz);
this.configuration.setVfsImpl(vfsImpl);
}
}
}
}
4.加载LogImpl
在loadCustomLogImpl方法中,从解析的settings的Properties对象中获取logImpl的值,并调用resolveClass方法得到其class对象,然后调用Configuration的setLogImpl进行赋值
private void loadCustomLogImpl(Properties props) {
Class<? extends Log> logImpl = this.resolveClass(props.getProperty("logImpl"));
this.configuration.setLogImpl(logImpl);
}
5.其他配置的处理
在settingsElement方法中,依次对各个settings配置进行解析和赋值
6.总结
Mybatis对Settings的解析时,首先将settings配置加载为Properties对象,然后指定解析对应的settings参数,这些参数已经在代码中固定了,然后调用Configuration中各个参数的set方法进行赋值,将settings的值处理后保存在Configuration对象中,每个settings参数对应Configuration的属性
- 上一篇: Mybatis框架
- 下一篇: Mybatis-Flex 一个优雅的 Mybatis 增强框架
猜你喜欢
- 2024-11-21 MyBatis详解(二)
- 2024-11-21 想要开发中灵活的使用Mybatis?精通结果映射,你准了吗?
- 2024-11-21 小学妹问:Mybatis常见注解有哪些?
- 2024-11-21 重学Mybatis(二)-------主键自增 (含面试题)
- 2024-11-21 Mybatis入门
- 2024-11-21 重学Mybatis(五)-------分页 (含面试题)
- 2024-11-21 一、手写mybatis框架
- 2024-11-21 MyBatis中的翻页
- 2024-11-21 Mybatis的基础和高级查询应用实践
- 2024-11-21 看完这一篇学会MyBatis就够了
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)