spring中獲取資源的方式一共有以下四種:
下面是對每種方式的詳細講解 :
resource介面的實現類有:
實現類說明
classpathresource
通過類路徑獲取資源檔案
filesystemresource
通過檔案系統獲取資源
urlresource
通過url位址獲取資源
bytearrayresource
獲取位元組陣列封裝的資源
servletcontextresource
獲取servletcontext環境下的資源
inputstreamresource
獲取輸入流封裝的資源
resource介面繼承了inputstreamsource
介面,inputstreamsource
介面中有乙個方法:getinputstream()
,所以彙總起來,resource介面中共有以下方法:
方法說明
exists()
判斷資源是否存在,true表示存在。
isreadable()
判斷資源的內容是否可讀。需要注意的是當其結果為true的時候,其內容未必真的可讀,但如果返回false,則其內容必定不可讀。
isopen()
判斷當前resource代表的底層資源是否已經開啟,如果返回true,則只能被讀取一次然後關閉以避免資源洩露;該方法主要針對於inputstreamresource,實現類中只有它的返回結果為true,其他都為false。
geturl()
返回當前資源對應的url。如果當前資源不能解析為乙個url則會丟擲異常。如bytearrayresource就不能解析為乙個url。
geturi()
返回當前資源對應的uri。如果當前資源不能解析為乙個uri則會丟擲異常。
getfile()
返回當前資源對應的file。
contentlength()
返回當前資源內容的長度。
lastmodified()
返回當前resource代表的底層資源的最後修改時間。
createrelative()
根據資源的相對路徑建立新資源。[預設不支援建立相對路徑資源]
getfilename()
獲取資源的檔名。
getdescription()
返回當前資源底層資源的描述符,通常就是資源的全路徑(實際檔名或實際url位址)。
getinputstream()
獲取當前資源代表的輸入流。除了inputstreamresource實現類以外,其它resource實現類每次呼叫getinputstream()方法都將返回乙個全新的inputstream。
演示**:
public
class
resourcetest
//判斷資源檔案是否可讀
if (resource.isreadable())
//判斷當前resource代表的底層資源是否已經開啟
if (resource.isopen())
system.out.println(resource.geturl());//獲取資源所在的url
system.out.println(resource.geturi());//獲取資源所在的uri
resource.getfile();//返回當前資源對應的file。
system.out.println(resource.contentlength());//輸出內容長度
system.out.println(resource.lastmodified());//返回當前resource代表的底層資源的最後修改時間。
resource.createrelative("myfile");//根據資源的相對路徑建立新資源。[預設不支援建立相對路徑資源]
system.out.println(resource.getfilename());//獲取資源檔名
system.out.println(resource.getdescription());
//獲取當前資源代表的輸入流
if (resource.isreadable())
}/**使用filesystemresource獲取資源**/
@test
public
void
testfilesystem() throws ioexception
/**使用urlresource獲取資源**/
@test
public
void
testurl() throws malformedurlexception
/**使用bytearrayresource獲取位元組陣列封裝的資源**/
@test
public
void
testbytearray() throws ioexception
/**使用inputstreamresource獲取輸入流封裝的資源。針對於輸入流的resource,其getinputstream()方法只能被呼叫一次。**/
@test
public
void
testinputstream() throws exception
}
spring框架為了更方便的獲取資源,盡量弱化程式設計師對各個resource介面的實現類的感知,定義了另乙個resourceloader
介面。該介面的getresource(string location)
方法可以用來獲取資源。它的defaultresourceloader實現類可以適用於所有的環境,可以返回classpathresource、urlresource等。
resourceloader在進行載入資源時需要使用字首來指定需要載入:「classpath:path」表示返回classpathresource,「http://path」和「file:path」表示返回urlresource資源,如果不加字首則需要根據當前上下文來決定,defaultresourceloader預設實現是載入classpath資源。
示例**:
@test
public
void
testresourceloader()
public
class
myresource
implements
public
void
}public
void
resource() throws ioexception
}
配置xml檔案:
id="myresource"
class="com.spring.test.myresource">
bean>
測試類:
public
public
static
void
main(string args) catch (ioexception e)
}}
通過依賴注入的方式把resource注入到bean中。
示例**:
public
class myresource
public
void
resource() throws ioexception
}
配置spring-resource xml檔案:
id="myresource"
class="com.spring.test.myresource">
name="resource">
classpath:test.txtvalue>
property>
bean>
測試類:
public
public
static
void
main(string args) catch (ioexception e)
}}
參考資料: Spring中 Resource註解的應用
前言,spring是乙個非常優秀的框架,在依賴ioc程式設計方面,手工方式提供了兩種方式注入bean,xml配置和使用註解 自動掃瞄package的方式 1.resource應用在字段上,則注入規則是 a.先使用欄位名字匹配bean,查詢到bean則注入,如果型別不匹配則此時有異常,注入失敗 b.如...
Spring中 Resource的多例模式
resource物件注入預設是單例模式,即全域性唯一。當我們需要得到多例模式的物件注入時,可以在注入的類上加上 scope prototype 註解去改變bean的作用域為多例。noargsconstructor allargsconstructor getter setter component ...
spring中 Resource註解的應用
spring中 resource註解的應用 spring是乙個非常優秀的框架,在依賴ioc程式設計方面,手工方式提供了兩種方式注入bean,xml配置和使用註解 自動掃瞄package的方式。1.resource應用在字段上,則注入規則是 a.先使用欄位名字匹配bean,查詢到bean則注入,如果型...