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来获得。

  • 相关阅读:
    树状数组
    POJ 1178 -- 国王和骑士
    read
    优先队列
    统计八连块
    1579、Function Run Fun(记忆化搜索)
    5488: 石子归并II (区间DP+环形DP+四边形不等式优化)
    4797: 能量项链(区间DP,环形DP)
    5936 桃子的矩阵快速幂
    Happy Necklace(找规律+矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9829110.html
Copyright © 2011-2022 走看看