码迷,mamicode.com
首页 > 编程语言 > 详细

MyBatis整合Spring的实现(4)

时间:2015-10-25 15:09:01      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

分析

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自己的配置中也有此项的配置,基本也是这样注册的。






MyBatis整合Spring的实现(4)

标签:

原文地址:http://my.oschina.net/u/1269959/blog/521736

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!