Mybatis中Configuration的屬性設置

上一篇介紹了Configuration的屬性,今天就看看屬性的設置過程。程序員

回顧

前面兩篇文章最後都講到最後是經過parse方法調用的parseConfiguration來設置Configuration的屬性的,具體源碼以下圖:面試

 

能夠看到parseConfiguration方法中幾乎每一行代碼都是調用一個方法,那麼接下來咱們就來一行一行的分析parseConfiguration代碼。mybatis

 

propertiesElement方法分析

首先第一行執行的是propertiesElement(root.evalNode("properties"));能夠看到是拿到mybatis配置文件中properties節點內容而後執行propertiesElement,咱們看到propertiesElement方法源碼以下圖:學習

 

上圖已經對這個方法有比較詳細的說明了,這裏在梳理一下,首先這個方法主要分三步,目的是設置Properties這個類,這個類繼承Hashtable只是擴展了一些方法,主流程三步詳解:ui

一、遍歷properties節點的子節點填充到Properties的一個對象中;url

二、獲取properties節點的resource和url屬性,利用Properties類的擴展方法讀取對應文件中的數據,從代碼中能夠看出來兩個屬性至少要存在一個;spa

三、把configuration中的variables設置進properties,最後把properties設置到configuration的variables屬性;3d

從上面這三個步驟咱們能夠得出一些結論:日誌

一、mybatis配置文件的properties節點resource和url屬性至少須要一個,而且resource是要優先與url配置的;對象

二、properties讀取順序是:首先讀取在 properties 元素體內指定的屬性。

而後根據 properties 元素中的 resource或url 屬性讀取類路徑下屬性文件,並覆蓋以前讀取過的同名屬性。最後讀取configuration中的variables(在初始化XMLConfigBuilder時傳遞的參數),並覆蓋以前讀取過的同名屬性。

 

因此properties參數的優先級是:經過方法參數傳遞的屬性具備最高優先級,resource/url 屬性中指定的配置文件次之,最低優先級的則是 properties 元素中指定的屬性。這個是一個面試題考點。

 

settings類型屬性設置

接下來是對settings類型的屬性設置,源碼以下圖:

 

properties屬性讀取差很少,settings中的屬性屬於Configuration的基礎屬性,限制比較嚴格不容許出現Configuration沒有的屬性。從代碼中能夠看到打印日誌的類也是在settings中設置的。還能夠擴展一些mybatis加載本地文件的類。

 

總結

今天至關於只梳理了mybatis配置文件中的properties和settings兩個節點的內容,不過咱們也清楚了properties配置的優先級。而且settings中不能設置mybatis不能識別的屬性,自定義日誌輸出類也能夠設置在settings配置中。

接下來還有好幾個擴展配置的加載過程,後面繼續分享。

Java程序員平常學習筆記,如理解有誤歡迎各位交流討論!

相關文章
相關標籤/搜索