标签:
分析
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