Spring學習--資源是個什麼東西
阿新 • • 發佈:2018-12-07
在日常程式開發中、處理外部資源是很繁瑣的事情,我們可能需要處理URL資源、File資源、ClassPath相關資源、伺服器相關資源等等很多資源。因此處理這些資源需要使用不同的介面,這就增加了 我們系統的複雜性;而且處理這些資源步驟都是類似的(開啟資源、讀取資源、關閉資源),因此如果能抽取出一個統一的介面來對這些底層資源進行統一訪問。
Spring提供了一個Resource介面來統一這些底層資源一致的訪問,而且提供了一些遍歷的介面,從而能提供我們的生產力。
Resource介面:
Spring的Resource介面代表底層外部資源,提供了對底層外部資源的一致性訪問介面。
public interface InputStreamSource {
InputStream getInputStream() throws IOException;
}
public interface Resource extends InputStreamSource {
boolean exists();
boolean isReadable();
boolean isOpen();
URL getURL() throws IOException;
URI getURI() throws IOException;
File getFile() throws IOException;
long contentLength() throws IOException;
long lastModified() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
1 )InputStreamSource介面解析:
getInputStream:每次呼叫都將返回一個新鮮的資源對應的java.io. InputStream位元組流,呼叫者在使用完畢後必須關閉該資源。
2)Resource介面繼承InputStreamSource介面,並提供一些便利方法:
exists:返回當前Resource代表的底層資源是否存在,true表示存在。
isReadable:返回當前Resource代表的底層資源是否可讀,true表示可讀。
isOpen:返回當前Resource代表的底層資源是否已經開啟,如果返回true,則只能被讀取一次然後關閉以避免資源洩露;常見的Resource實現一般返回false。
getURL:如果當前Resource代表的底層資源能由java.util.URL代表,則返回該URL,否則丟擲IOException。
getURI:如果當前Resource代表的底層資源能由java.util.URI代表,則返回該URI,否則丟擲IOException。
getFile:如果當前Resource代表的底層資源能由java.io.File代表,則返回該File,否則丟擲IOException。
contentLength:返回當前Resource代表的底層檔案資源的長度,一般是值代表的檔案資源的長度。
lastModified:返回當前Resource代表的底層資源的最後修改時間。
createRelative:用於建立相對於當前Resource代表的底層資源的資源,比如當前Resource代表檔案資源“d:/test/”則createRelative(“test.txt”)將返回表文件資源“d:/test/test.txt”Resource資源。
getFilename:返回當前Resource代表的底層檔案資源的檔案路徑,比如File資源“file://d:/test.txt”將返回“d:/test.txt”,而URL資源http://www.javass.cn將返回“”,因為只返回檔案路徑。
getDescription:返回當前Resource代表的底層資源的描述符,通常就是資源的全路徑(實際檔名或實際URL地址)。
Resource介面提供了足夠的抽象,足夠滿足我們日常使用。而且提供了很多內建Resource實現:ByteArrayResource、InputStreamResource 、FileSystemResource 、UrlResource 、ClassPathResource、ServletContextResource、VfsResource等。