zoukankan      html  css  js  c++  java
  • Mybatis MetaObject和ObjectWrapper设计概念

    ObjectWrapper

    该类的作用是对象的包装,对对象属性的操作,其行为有

    BaseWrapper

    具备了MetaObject,对象包装的公共父类,主要处理集合类型

    BeanWrapper

    具备了储存对象的Object和MetaClass

    @Override
    public Object get(PropertyTokenizer prop) {
        if (prop.getIndex() != null) {
            // 使用MetaObject逐级实例化集合对象
            Object collection = resolveCollection(prop, object);
            // 使用MetaObject获得Value
            return getCollectionValue(prop, collection);
        } else {
            return getBeanProperty(prop, object);
        }
    }

    MetaObject

    private final Object originalObject;
    private final ObjectWrapper objectWrapper;
    private final ObjectFactory objectFactory;
    private final ObjectWrapperFactory objectWrapperFactory;
    private final ReflectorFactory reflectorFactory;
    
    private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {
        this.originalObject = object;
        this.objectFactory = objectFactory;
        this.objectWrapperFactory = objectWrapperFactory;
        this.reflectorFactory = reflectorFactory;
    
        // 根据originalObject的类型实例化具体的ObjectMapper,将MetaObject自己注入进去,委派模式
        if (object instanceof ObjectWrapper) {
          this.objectWrapper = (ObjectWrapper) object;
        } else if (objectWrapperFactory.hasWrapperFor(object)) {
          this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);
        } else if (object instanceof Map) {
          this.objectWrapper = new MapWrapper(this, (Map) object);
        } else if (object instanceof Collection) {
          this.objectWrapper = new CollectionWrapper(this, (Collection) object);
        } else {
          this.objectWrapper = new BeanWrapper(this, object);
        }
    }

    获得初始对象的属性值通过ObjectWrapper并可能委派给MetaObject来获得。

  • 相关阅读:
    Python os模块介绍
    (转) JAVA中如何设置图片(图标)自适应Jlable等组件的大小
    (转)统计学习-2 感知机知识准备(模型类型、超平面与梯度下降法)
    详细讲述MySQL中的子查询操作 (来自脚本之家)
    (转)详解数据库的自然连接
    MySQL 数据类型 详解
    MySql详解(四)
    MySql详解(五)
    MySql详解(七)
    MySql详解(一)
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9829110.html
Copyright © 2011-2022 走看看