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