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集合之中,方便我们下次的使用.

  • 相关阅读:
    BZOJ 3262 cdq分治 OR 树套树
    Weekly Contest 132
    1007. Minimum Domino Rotations For Equal Row
    1002. Find Common Characters
    974. Subarray Sums Divisible by K
    926. Flip String to Monotone Increasing
    918. Maximum Sum Circular Subarray
    914. X of a Kind in a Deck of Cards
    907. Sum of Subarray Minimums
    900. RLE Iterator
  • 原文地址:https://www.cnblogs.com/trekxu/p/12836045.html
Copyright © 2011-2022 走看看