publicSqlSessionFactorybuild(Configurationconfig)
{
returnnewDefaultSqlSessionFactory(config);
}
上述的初始化过程中,涉及到了以下几个对象:
SqlSessionFactoryBuilder : SqlSessionFactory的构造器,用于创建SqlSessionFactory,采用了Builder设计模式
Configuration :该对象是mybatis-config.xml文件中所有mybatis配置信息
SqlSessionFactory:SqlSession工厂类,以工厂形式创建SqlSession对象,采用了Factory工厂设计模式
XmlConfigParser :负责将mybatis-config.xml配置文件解析成Configuration对象,共SqlSessonFactoryBuilder使用,创建SqlSessionFactory
接着上述的 MyBatis初始化基本过程讨论,当SqlSessionFactoryBuilder执行build()方法,调用了XMLConfigBuilder的parse()方法,然后返回了Configuration对象。那么parse()方法是如何处理XML文件,生成Configuration对象的呢?
1. XMLConfigBuilder会将XML配置文件的信息转换为Document对象,而XML配置定义文件DTD转换成XMLMapperEntityResolver对象,然后将二者封装到XpathParser对象中,XpathParser的作用是提供根据Xpath表达式获取基本的DOM节点Node信息的操作。如下图所示:


2. 之后XMLConfigBuilder调用parse()方法:会从XPathParser中取出 <configuration>节点对应的Node对象,然后解析此Node节点的子Node:properties, settings, typeAliases,typeHandlers, objectFactory, objectWrapperFactory, plugins, environments,databaseIdProvider, mappers
publicConfigurationparse()
{
if(parsed)
{
thrownewBuilderException("EachXMLConfigBuildercanonlybeusedonce.");
}
parsed=true;
//源码中没有这一句,只有parseConfiguration(parser.evalNode("/configuration"));
//为了让读者看得更明晰,源码拆分为以下两句
XNodeconfigurationNode=parser.evalNode("/configuration");
parseConfiguration(configurationNode);
returnconfiguration;
}
/*
解析"/configuration"节点下的子节点信息,然后将解析的结果设置到Configuration对象中
*/
privatevoidparseConfiguration(XNoderoot){
try{
//1.首先处理properties节点
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40254-3.html
不管是外在的软实力还是内在的硬实力