MyBatis整合Spring的实现(4)

分析java

MyBatis整合Spring的实现(1)代码实现的4.二、4.3能够知道,这2个都是去生成别名管理器TypeAliasRegistry类,下面就来分析代码。this

1 属性
spa

TypeAliasRegistry类中有个Map,key为字符串,value为对应的类的Class。默认还有不少,须要本身去看源代码。.net

2 别名管理器,Spring配置属性------包名debug

if (hasLength(this.typeAliasesPackage)) {
    String[] typeAliasPackageArray = tokenizeToStringArray(this.typeAliasesPackage,
      ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
    for (String packageToScan : typeAliasPackageArray) {
        configuration.getTypeAliasRegistry().registerAliases(packageToScan);
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Scanned package: '" + packageToScan + "' for aliases");
        }
    }
}

上述代码很明显,使用typeAliasesPackage属性,如:cn.vansky.bo.user;cn.vansky.bo.menu;code

typeAliasesPackage进行分割,分隔符",; \t\n",这里须要看Spring代码,再也不多说。orm

先MyBatis"全局配置类"获取默认的别名管理器在进行注册。对象

3 别名管理器,Spring配置属性------类blog

if (!isEmpty(this.typeAliases)) {
    for (Class<?> typeAlias : this.typeAliases) {
        configuration.getTypeAliasRegistry().registerAlias(typeAlias);
        if (this.logger.isDebugEnabled()) {
          this.logger.debug("Registered type alias: '" + typeAlias + "'");
        }
    }
}

2和3看起来好像更简单了,只是注册一下,可是在进一步看代码。
token

public void registerAlias(Class<?> type) {
    String alias = type.getSimpleName();
    Alias aliasAnnotation = type.getAnnotation(Alias.class);
    if (aliasAnnotation != null) {
      alias = aliasAnnotation.value();
    } 
    registerAlias(alias, type);
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Alias {
    public String value();
}

原来是去获取类中注解为"Alias"的类,注解value的值作为Map的key,value就是对象的Class。

总结:

目前看来这个类没有大的做用,可是这但是MyBatis中对类型配置的简化,在配置中能够使用这些字符串来代替须要的JAVA类型,这也就是为何叫它为"别名管理器",并且MyBatis本身的配置中也有此项的配置,基本也是这样注册的。

相关文章
相关标签/搜索