mybatis源碼解析 加載SqlMapConfig.xml

前言
我採用的源碼地址 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測試方法中運行跟蹤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章