spring基礎-IO

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接口,這個接口定義了一系列的方法,統一了對資源的訪問

Resource接口
通過內置提供大量的實現提供訪問資源的子類,提供了很多常用的資源訪問方式
這裏寫圖片描述

ResourceLoader

spring實現如此衆多的資源訪問類,那我們客戶端如何進行調用呢。
一.客戶端必須知道這些子類知識,手動去創建這些資源子類
二.服務器端提供一個統一解析的接口,通過一定的命名規則,
 自動創建這些子類。這樣客戶端就需要很少具體實現的知識。
真正做到了面向接口編程,客戶端不依賴子類實現。

這裏寫圖片描述

總結

統一訪問問題

spring通過定義一個Resource解決了IO URL獲得資源訪問接口的不一致
並提供了一些基本方法

加載資源問題

spring通過一個ResourceLoader接口DefaultResourceLoader 
實現類,解決了資源加載問題,客戶端只傳入字符串便可加載資源,
避免了客戶端和實現之間的耦合。

編碼層面上

Resource 接口
AbstractResource 抽象,對Resource的骨架實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章