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

posted @ 2020-05-06 14:07  最爱五仁月饼  阅读(186)  评论(0编辑  收藏  举报