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本身的配置中也有此項的配置,基本也是這樣註冊的。

相關文章
相關標籤/搜索