网站首页 > 技术文章 正文
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就够了
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)