resource resource =
1.資源載入
classpathresource 分析
spring 框架提供bean的載入機制,定義在xml中注入的bean將被建立。通過構造方法
其它方法
1. getpath 獲取路徑
2. getclassloader 獲取類載入器
3. exists 資源解析存在性
4. getinputstream 獲取輸入流
5. geturl 獲取url
6. createrelative 建立相對資源路徑
7. getdescription 獲取clazz 類名 + path 資訊
/**stringutils cleanpath(path) 原始碼解析* classpath 下資源載入
*/public
class
classpathresource
extends
abstractfileresolvingresource
public
classpathresource(string path, classloader classloader)
this.path = pathtouse;
this.classloader = (classloader != null ? classloader : classutils.getdefaultclassloader());
}
clanpath 是對path路徑的乙個簡單處理。
/**
* 例2
*/public
static string cleanpath(string path)
//windows_folder_separator = "\\" folder_separator = "/"
/** * 效果等同於string.replaceall (使用stringbuffer)
* 用stringbuilder效率更快
*/string pathtouse=replace(path, windows_folder_separator, folder_separator);
int prefixindex=pathtouse.indexof(":");
string prefix="";
if (prefixindex != -1)
}if (pathtouse.startswith(folder_separator))
/*** 以/ 切割 string用正則且步驟繁瑣,
*/string patharray=delimitedlisttostringarray(pathtouse, folder_separator);
listpathelements=new linkedlist<>();
int tops=0;
for (int i=patharray.length - 1; i >= 0; i--) else
if (top_path.equals(element)) else else }}
// remaining top paths need to be retained.
for (int i=0; i < tops; i++)
return prefix + collectiontodelimitedstring(pathelements, folder_separator);
}
2.資源解析
xmlbeanfactory (已過時)
直接使用defaultlistablebeanfactory (主要是對bean 註冊後的處理)以及xmlbeandefinitionreader (資源檔案讀取 解析 及註冊)
// 用於從xml中讀取 beandefinition
@deprecated
@suppresswarnings()
public
class
xmlbeanfactory
extends
defaultlistablebeanfactory
public
xmlbeanfactory(resource resource, beanfactory parentbeanfactory) throws bean***ception
}
2.1資源解析-xml驗證
xmlvalidationmodedetector 原始碼分析(獲取xml 後 ,對xml 約束檔案解讀 ,進行驗證)
// 1 auto 2 dtd 3 xsd(schema) : xml 驗證模式
public
intdetectvalidationmode(inputstream inputstream) throws ioexception
if (hasdoctype(content))
if (hasopeningtag(content))
}return (isdtdvalidated ? validation_dtd : validation_xsd); //dtd 或者xsd(schema)
}catch (charconversionexception ex)
finally
}
2.2資源解析-解析為document
defaultdocumentloader原始碼分析
//xml -》 document -》 bean
@override
// 資源 物件解析器 錯誤處理器 xml驗證 xml命名空間 //由resourceloader =》 獲取
public document loaddocument(inputsource inputsource, entityresolver entityresolver,
errorhandler errorhandler, int validationmode, boolean namespaceaware) throws exception
documentbuilder builder = createdocumentbuilder(factory, entityresolver, errorhandler);
return builder.parse(inputsource);
}
2.3資源解析-beandefinition 註冊
xmlbeandefinitionreader 分析(資源檔案讀取 解析 及註冊)
**
* 資源檔案讀取 解析 及註冊
*/public
class
xmlbeandefinitionreader
extends
abstractbeandefinitionreader
//通過屬性記錄已經載入過的資源
setcurrentresources = this.resourcescurrentlybeingloaded.get();
if (currentresources == null)
if (!currentresources.add(encodedresource))
try
轉化、解析document
//2.新建 beandefinitiondocumentreader (//定義讀取document 並註冊beandefinition功能)
return doloadbeandefinitions(inputsource, encodedresource.getresource());
}finally
}catch (ioexception ex)
finally }}
}//註冊beandefinition 個數
public
intregisterbeandefinitions(document doc, resource resource) throws beandefinitionstoreexception
spring入門學習 1 xml配置檔案載入方式
載入xml配置檔案方式 1 xmlbeanfactory 引用資源 spring 4已經廢棄 resource resource new classpathresource spring.xml beanfactory factory new xmlbeanfactory resource 3 用檔...
Spring原始碼之XML解析
資料準備階段 準備的目的是封裝 resource引數,目的是為了考慮到 resource可能存在編碼要求的情況,其次,通過 sax讀取 xml檔案的方式來準備 inputsource物件,最後將引數傳遞到 最核心的實現部分 doloadbeandefinitions inputsource,enco...
Spring 原始碼閱讀(1)
這週在學習spring的原始碼,常常迷失在 森林中,因為英語水平不高,常常需要借助google翻譯幫忙解釋注釋,所以速度比較慢。下面是我模擬spring的解析xml,依賴注入的過程,比較簡略。node node nodes.item i if node instanceof element claz...