前言
我採用的源碼地址 ibatis源碼 在ibatis-2目錄裏,源碼release jar包測試代碼在ibatis_release_jar_test目錄裏。
之所以使用ibatis源碼作爲閱讀對象,要明確的一點就是閱讀源碼不是爲了找工作,而是爲了工作爲了讓水平提高。mybatis源碼現在已經優化的越來越好,越來越強大。在這些強大的背後,邏輯業務非常複雜。想要閱讀其精髓,那麼就要從簡單的開始。ibatis代碼量小,閱讀容易。
在測試使用ibatis時候,第一步會有加載SqlMapConfig.xml文件。
//讀取xml文件
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
繼續抽絲剝繭。調用Resources類中的getResourceAsReader方法,返回IO中的Reader對象;
並且可以看出Resources類中的方法全是static修飾的方法,直接調用即可。
/**@param resource 是SqlMapConfig.xml文件的路徑*/
public static Reader getResourceAsReader(String resource)
throws IOException
{
Reader reader;
if (charset == null) {
reader = new InputStreamReader(getResourceAsStream(resource));
} else {
reader = new InputStreamReader(getResourceAsStream(resource), charset);
}
return reader;
}
根據文件路徑讀取文件返回InputStream的方法是getResourceAsStream,其方法裏的核心內容是jdk中的ClassLoader加載文件,然後返回InputStream。
public static InputStream getResourceAsStream(ClassLoader loader,
String resource) throws IOException
{
InputStream in = null;
if (loader != null)
in = loader.getResourceAsStream(resource);
if (in == null)
in = ClassLoader.getSystemResourceAsStream(resource);
if (in == null)
throw new IOException("Could not find resource " + resource);
return in;
}
上面的兩個方法就是加載SqlMapConfig.xml配置文件,將其變成Reader對象。然後對其下一步操作。
如果想要更加直觀的感受在BatchTest測試方法中運行跟蹤。