spring對JDK中的資源訪問
JDK的資源訪問
在JDK中對資源的訪問方式
URL:抽象對網絡訪問的資源目錄。但是缺少例如isExist() isOpen()等方法
IO:提供了對於文件 二進制流等的抽象。
但是缺少了類相對路徑 servlet相對路徑的的資源訪問。
URL獲得資源方式
//獲得InputStream方法
URL url = new URL("");
URLConnection connection = url.openConnection();
connection.getInputStream();
//查看文件類型方法
URL url = new URL("");
//獲得URL協議
String protocol = url.getProtocol();
//如果爲文件協議
if("file".equal(protocol)){
}else if(protocol.startWith("vfs:")){//如果爲vfs協議
}
ClassPath獲得資源
ClassLoader loader = this.getClass().getClassLoader();
InputStream in = loader.getResourceAsStream();
Servlet獲得相對資源
InputStream in = servletContext.getResourceAsStream();
JDK提供了很多中資源訪問的接口,但是獲得資源的方法並不統一,也缺少一些很使用的資源訪問方式
spring 解決之道
spring對所有的資源抽象爲Resource接口,這個接口定義了一系列的方法,統一了對資源的訪問
通過內置提供大量的實現提供訪問資源的子類,提供了很多常用的資源訪問方式
ResourceLoader
spring實現如此衆多的資源訪問類,那我們客戶端如何進行調用呢。
一.客戶端必須知道這些子類知識,手動去創建這些資源子類
二.服務器端提供一個統一解析的接口,通過一定的命名規則,
自動創建這些子類。這樣客戶端就需要很少具體實現的知識。
真正做到了面向接口編程,客戶端不依賴子類實現。
總結
統一訪問問題
spring通過定義一個Resource解決了IO URL獲得資源訪問接口的不一致
並提供了一些基本方法
加載資源問題
spring通過一個ResourceLoader接口DefaultResourceLoader
實現類,解決了資源加載問題,客戶端只傳入字符串便可加載資源,
避免了客戶端和實現之間的耦合。
編碼層面上
Resource 接口
AbstractResource 抽象,對Resource的骨架實現