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註解,已註解的為準,如果沒寫註解,就使用類的簡單名稱(這裡原來大寫還是大寫)。
可以看到,這裡的別名統一轉成了小寫,然後放到乙個map中。public
void
registeralias(string alias, class<?> value)
type_aliases.put(key, value);
}
org.apache.ibatis.type.typealiasregistry#typealiasregistry
檢視typealiasregistry的構造方法。
最後我們看下package的別名註冊:registeralias("string", string.class);
registeralias("byte", byte.class);
registeralias("long", long.class);
...
這裡的邏輯也比較簡單,查詢包下的類,一一註冊成別名就可以了。public
void
registeraliases(string packagename)
public
void
registeraliases(string packagename, class<?> supertype)
}}
這裡有特定的是resolverutil這個工具類。也不掉大家胃口了,看看他是怎麼實現查詢包下的類的。
這個類下有個集合,是存放查詢結果的
裡面的find方法/** the set of matches being accumulated. */
private set> matches = new hashset>();
getpackagepath把包路徑的「.」換成「/」,然後用vfs.getinstance().list(path)來獲取該路徑下的檔案,這個查詢檔案是通過public resolverutilfind(test test, string packagename)
} catch (ioexception ioe)
return
this;
}
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
作為乙個模擬器,也就是乙個虛擬機器,所作的事情就是解釋執行執行於該機器上的軟體 包括系統軟體和使用者態的應用軟體。基於這個想法,系統軟體應該是被載入到記憶體中的某些位置,當應用軟體使用系統呼叫時,就跳轉到系統函式的入口。在這個過程中,模擬器所做的事前後沒有本質區別,就是取指令並解析執行,沒有必要區分...