1. 程式人生 > >spring-core io包ResourceLoader介面

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");
		}
	}