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

浙公网安备 33010602011771号