理解一個(gè)類糠聪,首先需要知道類的作用。SqlSessionFactoryBean 類的作用就是通過加載器讀取mybatis.xml 和 myabtis-spring.xml生成 SqlSessionFactory昵济。先看一下mybatis配置文件和mybatis-spring整合配置文件垮刹。
mybatis 屬性配置:
mybatis-spring 整合:
SqlSessionFactoryBean 類繼承了?InitializingBean 祥国,?InitializingBean 的作用是初始化容器后铁坎,會(huì)執(zhí)行?afterPropertiesSet() 方法。
從上圖中的紅框中可以看出蹬跃,啟動(dòng)時(shí)會(huì)執(zhí)行?buildSqlSessionFactory 方法匙瘪,作用就是創(chuàng)建?SqlSessionFactory。
在介紹?buildSqlSessionFactory? 方法之前蝶缀,需要了解一下?org.apache.ibatis.session.Configuration 類丹喻。
Configuration 類的作用是用來存儲(chǔ) mybatis.xml 配置的各種屬性,創(chuàng)建?SqlSessionFactory 的過程就是不斷的讀取配置文件中的屬性翁都,然后 set 進(jìn)入?Configuration 中碍论。
初始化 Configuration 對(duì)象之后,需要對(duì)傳入?SqlSessionFactoryBean 不為空的對(duì)象進(jìn)行賦值柄慰。例:
至此鳍悠。SqlSessionFactoryBean? 傳入屬性賦值已經(jīng)講述完成税娜。下面講述的是對(duì)于 mybatis.xml 和 mybatis-spring.xml 中?mapperLocations 的解析。
XMLConfigBuilder:解析mybatis.xml配置文件藏研,使用讀取配置文件中各個(gè)節(jié)點(diǎn)的方式敬矩,將屬性值set進(jìn)入Configuration對(duì)象。
mybatis.xml解析過程:
從源碼可以看出蠢挡,最開始截取的是根節(jié)點(diǎn) /configuration弧岳。然后對(duì)根節(jié)點(diǎn)中的各個(gè)節(jié)點(diǎn)進(jìn)行切割。但是切割的方法都是一樣的:root.evalNode()业踏。
切割完成之后禽炬,就是將各個(gè)元素保存在Configuration中。下面截圖是針對(duì)于<settings>元素的保存過程
接下來就是最后一步了勤家,對(duì)于 mapper.xml 的解析腹尖。使用的?XMLMapperBuilder。
相信大家對(duì)于 mapper.xml 配置格式已經(jīng)很清晰伐脖,這里就不過多介紹热幔,上源碼。
在?configurationElement 是仍然是對(duì)于各個(gè)節(jié)點(diǎn)的拆分讼庇,然后針對(duì)于各個(gè)屬性進(jìn)行一個(gè)Configure断凶。
最后將項(xiàng)目中所需要的預(yù)加載屬性存放到? SqlSource 對(duì)象中,進(jìn)行預(yù)加載巫俺。
由于本文中需要有一些 mybatis 基礎(chǔ)。如果發(fā)現(xiàn)看起來較吃力肿男,可以先看一下官方的文檔介汹,里面有對(duì)于各個(gè)屬性,配置和簡單入門使用的講解舶沛。官網(wǎng)地址:http://www.mybatis.org/mybatis-3/zh/index.html