反射包org.apache.ibatis.reflection
的结构如下:
Reflector是mybatis反射模块的基础,每一个Reflector对象对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息。
Reflector类的属性和构造器
1.查找Clazz的默认构造方法(无参数构造方法),具体实现是通过反射遍历所有构造方法
private void addDefaultConstructor(Class<?> clazz) {
Constructor<?>[] consts = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : consts) {
if (constructor.getParameterTypes().length == 0) {//构造方法的参数列表长度为0
if (canControlMemberAccessible()) {
try {
constructor.setAccessible(true);
}catch (Exception e) {
//ignore
}
}
if (constructor.isAccessible()) {
this.defaultConstructor = constructor;
}
}
}
}
网友评论