Spring中Resource(資源)的獲取

2021-08-04 15:43:42 字數 4133 閱讀 9994

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則注入,如果型...