Mybatis的反射

  我们都知道Mybatis是ORM框架,主要是实现数据库字段和Java对象的映射,其中用到的就是反射。Mybatis的反射是一个特别强大的模块。
  Mybatis的反射这里主要介绍ObjectFactory,Reflector,ReflectorFactory,ObjectWrapper,MetaObject

一:ObjectFactory
  ObjectFactory主要提供了create方法,通过mapper.xml里面的对象路径反射生成对象。DefaultObjectFactory继承了ObjectFactory重载了create方法,具体实现反射的细节。

public class DefaultObjectFactory implements ObjectFactory, Serializable {
   

  private static final long serialVersionUID = -8855120656740914948L;

  @Override
  public <T> T create(Class<T> type) {
   
    return create(type, null, null);
  }

  @SuppressWarnings("unchecked")
  @Override
  public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {
   
	//判断类是不是集合类,如果是集合类指定具体的实现类
    Class<?> classToCreate = resolveInterface(type);
    // we know types are assignable
    return (T) instantiateClass(classToCreate, constructorArgTypes, constructorArgs);
  }

二:Reflector是反射的核心类,里面定义了type属性保存对应的class以及用来保存对象中可读(有get方法),可写(有set方法)属性的数组,保存set,get方法和set的入参类型,get的返回类型的Map。在Mybatis启动时,会将对象的属性全部加载到Reflector中。

public class Reflector {
   

  private final Class<?> type;//对应的class
  private final String[] readablePropertyNames;//可读属性的名称集合,存在get方法即可读
  private final String[] writeablePropertyNames;//可写属性的名称集合,存在set方法即可写
  private final Map<String, Invoker> setMethods = new HashMap<>();//保存属性相关的set方法
  private final Map<String, Invoker> getMethods = new HashMap<>();//保存属性相关的get方法
  private final Map<String, Class<

你可能感兴趣的:(Mybatis,mybatis,反射)