标签:
分析
MyBatis整合Spring的实现(1)中代码实现的4.2、4.3可以知道,这2个都是去生成别名管理器TypeAliasRegistry类,下面就来分析代码。
1 属性

TypeAliasRegistry类中有个Map,key为字符串,value为对应的类的Class。默认还有很多,需要自己去看源代码。
2 别名管理器,Spring配置属性------包名
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;
对typeAliasesPackage进行分割,分隔符",; \t\n",这里需要看Spring代码,不再多说。
先MyBatis"全局配置类"获取默认的别名管理器在进行注册。
3 别名管理器,Spring配置属性------类
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看起来好像更简单了,只是注册一下,但是在进一步看代码。
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自己的配置中也有此项的配置,基本也是这样注册的。
标签:
原文地址:http://my.oschina.net/u/1269959/blog/521736