mybatis 源码系列(二) 配置类Configuration
更多mybatis 源码系列文章可关注我的博客,点击前往
我们在第一章初始化中知道了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的属性,我们会在后面逐一研究攻破.