Mybatis反射工厂类DefaultReflectorFactory

DefaultReflectorFactory是反射工厂接口ReflectorFactory的默认实现,其主要是实现了对反射对象Reflector的创建和缓存。
有三个方法:

  // 判断是否开启缓存
  boolean isClassCacheEnabled();
  // 设置是否缓存
  void setClassCacheEnabled(boolean classCacheEnabled);
  // 生成反射对象Reflector
  Reflector findForClass(Class<?> type);

其缓存功能主要是通过ConcurrentMap实现的,ConcurrentHashMap是一个线程安全,并且是一个高效的HashMap。

DefaultReflectorFactory的源码如下:

package org.apache.ibatis.reflection;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class DefaultReflectorFactory implements ReflectorFactory {
  private boolean classCacheEnabled = true;
  // 缓存反射对象Reflector
  private final ConcurrentMap<Class<?>, Reflector> reflectorMap = new ConcurrentHashMap<Class<?>, Reflector>();
  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) {
      // 从缓存中获取反射对象Reflector 
      Reflector cached = reflectorMap.get(type);
      //缓存中没有则新建反射对象并放入到缓存中
      if (cached == null) {
        cached = new Reflector(type);
        reflectorMap.put(type, cached);
      }
      return cached;
    } else {
      return new Reflector(type);
    }
  }
}

你可能感兴趣的:(MyBatis源码分析,mybatis)