spring-core io包ResourceLoader介面
一、介面類繼承圖:
二、介面功能概述和實現
ResourceLoader介面定義了獲取資源的介面,如下圖:
DefaultResourceLoader提供了預設實現,預設實現中通過ClassLoader讀取類根路徑下的檔案資源,也可以讀取URL形式的檔案資源,子類可以通過addProtocolResolver(ProtocolResolver resolver)或者覆寫getResourceByPath(String path)方法來改變預設的讀取方式。ProtocolResolver的介面很簡單,只有一個方法Resource resolve(String location, ResourceLoader resourceLoader)。
ClassRelativeResourceLoader繼承自DefaultResourceLoader,覆寫了getResourceByPath(String path)方法,將通過ClassLoader讀取類根路徑下的檔案資源改成通過Class讀取。
FileSystemResourceLoader繼承自DefaultResourceLoader,覆寫了getResourceByPath(String path)方法,將通過ClassLoader讀取類根路徑下的檔案資源改成通過FileSystemResource類讀取。 ResourceEditor類綜合了PropertyResolver實現類和ResourceLoader實現類,預設是StandardEnvironment類和DefaultResourceLoader類讀取某個資源,通過PropertyResolver解析路徑中包含的系統屬性或者環境變數,通過ResourceLoader載入解析後的路徑。具體使用如下:
@Test public void testSystemPropertyReplacement() throws Exception { PropertyEditor editor = new ResourceEditor(); System.setProperty("test.prop", "test.txt"); try { editor.setAsText("${test.prop}"); Resource resolved = (Resource) editor.getValue(); assertEquals("test.txt", resolved.getFilename()); assertEquals(4l, resolved.contentLength()); } finally { System.getProperties().remove("test.prop"); } }