mybatis 源码系列(二) 配置类Configuration

时间:2019-05-15
本文章向大家介绍mybatis 源码系列(二) 配置类Configuration,主要包括mybatis 源码系列(二) 配置类Configuration使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

我们在第一章初始化中知道了mybatis的核心配置类为org.apache.ibatis.session.Configuration.java

先来看Configuration.java的类图

看到类图,瞬间就懵逼了,这属性也太多了吧…

不过想到mybatis的功能如此强大,那如此多的属性也是可以理解的,我会逐一探索.

构造函数

通过类图我们发现,Configuration主要提供了两个构造函数:

  • 空构造,不传任意参数
  • 根据Environment环境变量来构造

空构造

先来看空构造的代码

/***
   * 空构造,初始化mybatis的相关处理类方法
   */
  public Configuration() {
    typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
    typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);

    typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
    typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
    typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);

    typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
    typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
    typeAliasRegistry.registerAlias("LRU", LruCache.class);
    typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
    typeAliasRegistry.registerAlias("WEAK", WeakCache.class);

    typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);

    typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
    typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);

    typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
    typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
    typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
    typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
    typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
    typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
    typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);

    typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
    typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);

    languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
    languageRegistry.register(RawLanguageDriver.class);
  }

空构造中注册了大量内置的mybatis核心逻辑处理类,这些类的作用我们会在后面章节逐一研究,这里不做说明

根据Environment

来看构造函数

/***
   * 根据环境参数构造
   * @param environment
   */
  public Configuration(Environment environment) {
    this();
    this.environment = environment;
  }

首先调用空构造,其次,赋值Environment属性

如果不看其中具体的属性,从目标两个构造函数来看,Configuration配置类似乎也是很简单的.

关于Configuration的属性,我们会在后面逐一研究攻破.