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

  • 相关阅读:
    Docker _简单使用
    IDEA常见问题
    Linux安装JDK
    vitualbox网络设置链接
    MQ对比
    乐观锁和悲观所在数据库中的实现
    11.08 JS知识
    11.07知识整理
    11.06 知识整理
    本周知识整理
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9829110.html
Copyright © 2011-2022 走看看