栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis源码学习六(MetaObject)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis源码学习六(MetaObject)

MetaObject基本架构

MetaObject获取属性值流程

源码分析MetaObject获取属性值
public class MetaObjectTest {

    @Test
    public void test1(){
        Object blog = new Blog();
       Configuration configuration = new Configuration();
        MetaObject metaObject = configuration.newMetaObject(blog);
        User user = new User();
        user.setName("xxppp");

        ArrayList comments = new ArrayList<>();
        Comment comment = new Comment();
        comment.setUser(user);
        comments.add(comment);
        metaObject.setValue("comments",comments);
       metaObject.getValue("comments[0].user.name");
    }
}

 经过属性分词器解析

 此时hasNext()为true表示存在子属性

调用getValue,此时参数和上一次已经不一样了。为comments[0],此时没有子属性,直接调用get方法获取comments[0]的值。

 再将获取到的comments[0]值包装为MetaObject。

继续调用getValue(),此时参数为user.name。

 此时是有子属性的,为name,会进入metaObjectForProperty()。

此时user没有子属性,调用get方法获取user值

 将获取到的user值包装为MetaObject。

继续调用getValue(),此时参数是name,没有子属性,直接调用get()获取name值

对BeanWrapper【get】方法单独分析

再次出现调用getValue() 

 

 根据属性名,反射执行getXxx方法

总结:获取属性主要是利用MetaObject中的属性分词器,和反射原理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号