PropertyTokenizer属性解析器实现,So Easy

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();
        }
    }

测试结果:
PropertyTokenizer属性解析器实现,So Easy_第1张图片
实现原理:每次解析都会产生一个新的解析对象直至无法解析,通过构造方法充当解析方法以及实现Iterator迭代器接口。
1)定义拆分后的属性字段(其中indexedName = name[ index ])
2)定义解析方法,构造方法实现
3)怎么判断是否解析终结?怎么访问下一层级?实现Iterator迭代器接口
4)对于不需的功能,异常抛出remove()方法

你可能感兴趣的:(MyBatis源码分析,mybatis)