2.10.解析 reflectorFactory元素 解析并配置 Reflector 对象的创建工厂

优质
小牛编辑
134浏览
2023-12-01

我们在上前文提到过ReflectorFactory,他是一个用于根据class生成对应的Reflector对象的辅助性工厂类,

他创建的Reflector对象用来缓存一个类定义的基本信息,包括类的类型,可读可写属性名称,以及对应的·getter/setter·方法,构造函数等。

对于ReflectorFactory的DTO定义和objectWrapperFactory相似:

<!ELEMENT reflectorFactory EMPTY>
<!ATTLIST reflectorFactory
type CDATA #REQUIRED
>

reflectorFactory 必须有一个type属性,该属性指向一个ReflectorFactory的实例,可以使用别名。

其解析方法也和objectWrapperFactory相似,借由ConfigurationparseConfiguration方法来对其进行解析和注册使用。

private void parseConfiguration(XNode root) {
    // ...
   // 配置反射工厂
   reflectorFactoryElement(root.evalNode("reflectorFactory"));
   // ...
}

/**
 * 解析reflectorFactory节点
 *
 * @param context reflectorFactory节点
 */
private void reflectorFactoryElement(XNode context) throws Exception {
    if (context != null) {
        String type = context.getStringAttribute("type");
        ReflectorFactory factory = (ReflectorFactory) resolveClass(type).newInstance();
        configuration.setReflectorFactory(factory);
    }
}

整个过程比较简单,在通过反射获取到ReflectoryFactory的实现类之后,mybatis会用其取代默认的DefaultReflectorFactory实现类。