MyBatis源码解析 - 反射模块
MyBatis源码解析 - 反射模块 1. 前言 该模块位于 org.apache.ibatis.reflection 包中,MyBatis在进行参数处理、结果映射等操作时,会涉及大量的反射操作。Java 中的反射虽然功能强大,但是代码编写起来比较复杂且容易出错,为了简化反射操作的相关代码,MyBatis提供了专门的反射模块,它对常见的反射操作做了进一步封装,提供了更加简洁方便的反射API。本节就来为读者介绍该模块中核心代码的实现。 2. Reflector Reflector 是MyBaits中反射模块的基础,Reflector中缓存了很多反射操作需要使用的元数据。各个字段如下: private final Class<?> type; //对应的class类型 private final String[] readablePropertyNames; //可读属性的名称集合,可读属性就是存在相应getter方法的属性 private final String[] writablePropertyNames; //可写属性的名称集合,可写属性就是存在相应setter方法的属性 //记录了属性相应的setter方法,key是属性名称,value 是Invoker对象,它是对setter方法对应 // Method 对象的封装 private final Map<String,