zoukankan      html  css  js  c++  java
  • 004 反射工具类

    在mybatis之中大量操作javaBean,这就涉及到了大量的反射操作,为了简化反射操作的使用性,于是封装了一个反射器进行使用.

    Reflector.

    这个类在初始化的时候,就会对字节码进行解析,进而将这一系列的反射信息都保存下来.比如常见的get,set方法等,构造函数等.

    但是反射操作是比较消耗性能的,于是在Mybatis之中设计了一个ReflectorFactory对象.

    这个对象会将class字节码和对应的反射器进行绑定,存储起来,到时候我们如果需要反射器了,直接可以通过缓存获取到.

    public class DefaultReflectorFactory implements ReflectorFactory {
      private boolean classCacheEnabled = true;
      private final ConcurrentMap<Class<?>, Reflector> reflectorMap = new ConcurrentHashMap<>();
    
      public DefaultReflectorFactory() {
      }
    
      @Override
      public boolean isClassCacheEnabled() {
        return classCacheEnabled;
      }
    
      @Override
      public void setClassCacheEnabled(boolean classCacheEnabled) {
        this.classCacheEnabled = classCacheEnabled;
      }
    
      @Override
      public Reflector findForClass(Class<?> type) {
        if (classCacheEnabled) {
          // synchronized (type) removed see issue #461
          return reflectorMap.computeIfAbsent(type, Reflector::new);
        } else {
          return new Reflector(type);
        }
      }
    
    }
    

      我们看到实际上最终的处理都存储到了一个Map集合之中,方便我们下次的使用.

  • 相关阅读:
    小心使用宏
    常见文件、目录、路径操作函数
    链表法页框的分配和去配
    获取调试符号文件
    Visual C++ Runtime Error 调试
    HEAP: Free Heap block XXXX modified at XXXX after it was freed
    磁盘操作 API
    【转】浅谈大型网站动态应用系统架构 Mr
    jQuery1.3.1 Tab选项卡 Mr
    spring依赖注入思想 Mr
  • 原文地址:https://www.cnblogs.com/trekxu/p/12836045.html
Copyright © 2011-2022 走看看