mybatis原始碼解讀(7)

2021-07-01 20:03:05 字數 2365 閱讀 2262

private

void

typealiaseselement(xnode parent) else else

} catch (classnotfoundexception e) }}

}}

alias="author"

type="domain.blog.author"/>

alias="blog"

type="domain.blog.blog"/>

alias="comment"

type="domain.blog.comment"/>

alias="post"

type="domain.blog.post"/>

alias="section"

type="domain.blog.section"/>

alias="tag"

type="domain.blog.tag"/>

typealiases>

或者

檔案的解析很簡單,迴圈他的子節點,然後判斷節點的型別,是package還是typealias,執行相應的邏輯。

我們先來看typealias的邏輯。

if (alias == null)  else
這個可以看出type是必填項,alias別名可不填。

public

void

registeralias(class<?> type)

registeralias(alias, type);

}

不傳別名的註冊:

拿到類的******name(即不包含包名的類名)。再去獲取該類是否有alias註解。

這個邏輯可以看出,對於不寫別名的型別,如果寫了alias註解,已註解的為準,如果沒寫註解,就使用類的簡單名稱(這裡原來大寫還是大寫)。

public

void

registeralias(string alias, class<?> value)

type_aliases.put(key, value);

}

可以看到,這裡的別名統一轉成了小寫,然後放到乙個map中。

org.apache.ibatis.type.typealiasregistry#typealiasregistry

檢視typealiasregistry的構造方法。

registeralias("string", string.class);

registeralias("byte", byte.class);

registeralias("long", long.class);

...

最後我們看下package的別名註冊:

public

void

registeraliases(string packagename)

public

void

registeraliases(string packagename, class<?> supertype)

}}

這裡的邏輯也比較簡單,查詢包下的類,一一註冊成別名就可以了。

這裡有特定的是resolverutil這個工具類。也不掉大家胃口了,看看他是怎麼實現查詢包下的類的。

這個類下有個集合,是存放查詢結果的

/** the set of matches being accumulated. */

private set> matches = new hashset>();

裡面的find方法

public resolverutilfind(test test, string packagename) 

} catch (ioexception ioe)

return

this;

}

getpackagepath把包路徑的「.」換成「/」,然後用vfs.getinstance().list(path)來獲取該路徑下的檔案,這個查詢檔案是通過

collections.list(thread.currentthread().getcontextclassloader().getresources(path));

來獲取的,然後還要經過一次list的轉換,這下面就比較複雜了。有興趣的同學可以繼續往下看,我們再深入就沒完沒了了。

這裡註冊了很多預設的別名。以上即別名機制的全部內容。其實很簡單是不是。看了原始碼,別名是不是就可以用的很6了。

mybatis原始碼解讀(3)

string resource mybatis config.xml inputstream inputstream resources.getresourceasstream resource sqlsessionfactory sqlsessionfactory new sqlsessionfa...

MyBatis 原始碼解讀 配置解析過程

我們從mybatis config.xml 開始。在第一節課的時候我們已經分析了核心配置了,大概明白了mybatis 有哪些配置項,和這些配置項的大致含義。這裡我們再具體看一下這裡面的標籤都是怎麼解析的,解析的時候做了什麼。sqlsessionfactory sqlsessionfactory ne...

jpcsp原始碼解讀7 HLE

作為乙個模擬器,也就是乙個虛擬機器,所作的事情就是解釋執行執行於該機器上的軟體 包括系統軟體和使用者態的應用軟體。基於這個想法,系統軟體應該是被載入到記憶體中的某些位置,當應用軟體使用系統呼叫時,就跳轉到系統函式的入口。在這個過程中,模擬器所做的事前後沒有本質區別,就是取指令並解析執行,沒有必要區分...