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