PropertyTokenizer是Mybatis中的属性解析器,其主要实现原理如下:
public PropertyTokenizer(String fullname) {
// 判断是否以“.”分隔
int delim = fullname.indexOf('.');
if (delim > -1) {
name = fullname.substring(0, delim);
children = fullname.substring(delim + 1);
} else {
name = fullname;
children = null;
}
indexedName = name;
// 判断是否以“[”分隔
delim = name.indexOf('[');
if (delim > -1) {
index = name.substring(delim + 1, name.length() - 1);
name = name.substring(0, delim);
}
}
测试示例:
@Test
public void test(){
String str = "list[0].user.age";
PropertyTokenizer tokenizer = new PropertyTokenizer(str);
while (tokenizer.hasNext()){
System.out.println("indexedName:"+tokenizer.getIndexedName());
System.out.println("index:"+tokenizer.getIndex());
System.out.println("name:"+tokenizer.getName());
System.out.println("children:"+tokenizer.getChildren());
System.out.println("---------------------------------------");
tokenizer = tokenizer.next();
}
}
测试结果:
实现原理:每次解析都会产生一个新的解析对象直至无法解析,通过构造方法充当解析方法以及实现Iterator迭代器接口。
1)定义拆分后的属性字段(其中indexedName = name[ index ])
2)定义解析方法,构造方法实现
3)怎么判断是否解析终结?怎么访问下一层级?实现Iterator迭代器接口
4)对于不需的功能,异常抛出remove()方法