The IoC Container 2. Resources

2. Resources

2.1. Introduction

闡述java.net.URL的種種缺點硝岗,說明其不足以用來描述所有資源可都。

2.2. The Resource Interface

針對資源訪問胳岂,Spring定義了自己的接口:

public interface Resource extends InputStreamSource {

    boolean exists();

    boolean isOpen();

    URL getURL() throws IOException;

    File getFile() throws IOException;

    Resource createRelative(String relativePath) throws IOException;

    String getFilename();

    String getDescription();

}
public interface InputStreamSource {

    InputStream getInputStream() throws IOException;

}

接口相關(guān)重要方法說明:

  • getInputStream(): Locates and opens the resource, returning an InputStream for reading from the resource. It is expected that each invocation returns a fresh InputStream. It is the responsibility of the caller to close the stream.
  • exists(): Returns a boolean indicating whether this resource actually exists in physical form.
  • isOpen(): Returns a boolean indicating whether this resource represents a handle with an open stream. If true, the InputStream cannot be read multiple times and must be read once only and then closed to avoid resource leaks. Returns false for all usual resource implementations, with the exception of InputStreamResource.
  • getDescription(): Returns a description for this resource, to be used for error output when working with the resource. This is often the fully qualified file name or the actual URL of the resource.

Spring在很多情況下都用了Resource接口高帖。即使用戶不使用Spring框架稿饰,Spring也非常推薦Resource接口及其相關(guān)實現(xiàn)作為java的資源訪問的替代方案锦秒,雖然這樣跟Spring產(chǎn)生了耦合,但是用起來相當(dāng)于引入了第三方庫喉镰,沒有什么負(fù)面影響旅择。

2.3. Built-in Resource Implementations

Spring包含以下Resource的默認(rèn)實現(xiàn):

2.4. The ResourceLoader

public interface ResourceLoader {

    Resource getResource(String location);

}

所有application contexts都實現(xiàn)了ResourceLoader接口,所以可以通過自動裝配的將ResourceLoader直接注入到bean中使用侣姆。同時生真,application contexts都具有g(shù)etResource()方法,可以直接調(diào)用捺宗。ApplicationContext的getResource()方法的返回類型為2.3中提到的幾種類型柱蟀。有兩種方式可以決定返回的Resource類型:1,資源前綴classpath或者file等蚜厉;2长已,在沒有資源前綴的情況下,由ApplicationContext類型決定弯囊,比如ClassPathXmlApplicationContext痰哨,在不指定資源前綴的情況下,返回ClassPathResource類型匾嘱。

Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");

2.5. The ResourceLoaderAware interface

可以通過繼承ResourceLoaderAware接口斤斧,由Spring注入ResourceLoader。不過推薦直接使用@Autowired霎烙,更方便撬讽。

public interface ResourceLoaderAware {

    void setResourceLoader(ResourceLoader resourceLoader);
}

2.6. Resources as Dependencies

可以直接注入Resource類型,Spring會根據(jù)前綴情況自動轉(zhuǎn)換相應(yīng)的Resource類型:

@Data
@Component
public class ResourceBean {

    @Autowired
    @Value("classpath:app.properties")
    private Resource resource;

    @Autowired
    @Value("file:///app.properties")
    private Resource resource1;
}

2.7. Application Contexts and Resource Paths

通配符的使用悬垃,兼容性問題和一些使用注意事項游昼。建議直接看官方文檔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尝蠕,一起剝皮案震驚了整個濱河市烘豌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌看彼,老刑警劉巖廊佩,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囚聚,死亡現(xiàn)場離奇詭異,居然都是意外死亡标锄,警方通過查閱死者的電腦和手機顽铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來料皇,“玉大人谓松,你說我怎么就攤上這事〖粒” “怎么了鬼譬?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舷手。 經(jīng)常有香客問我拧簸,道長,這世上最難降的妖魔是什么男窟? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任盆赤,我火速辦了婚禮,結(jié)果婚禮上歉眷,老公的妹妹穿的比我還像新娘牺六。我一直安慰自己,他們只是感情好汗捡,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布淑际。 她就那樣靜靜地躺著,像睡著了一般扇住。 火紅的嫁衣襯著肌膚如雪春缕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天艘蹋,我揣著相機與錄音锄贼,去河邊找鬼。 笑死女阀,一個胖子當(dāng)著我的面吹牛宅荤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浸策,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冯键,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了庸汗?” 一聲冷哼從身側(cè)響起惫确,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雕薪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昧诱,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年所袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凶掰。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡燥爷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懦窘,到底是詐尸還是另有隱情前翎,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布畅涂,位于F島的核電站港华,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏午衰。R本人自食惡果不足惜立宜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臊岸。 院中可真熱鬧橙数,春花似錦、人聲如沸帅戒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逻住。三九已至钟哥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞎访,已是汗流浹背腻贰。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留装诡,地道東北人银受。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像鸦采,于是被迫代替她去往敵國和親宾巍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 全新的味道渔伯,在舌尖泛起層層漣漪顶霞,令人回味無窮,這種如吸食鴉片一樣的魔癮,驅(qū)使著原始人類開始狂熱地追尋如何使...
    東方有月閱讀 248評論 0 6
  • 人脈對于一個人的成功有多重要,不言而喻古徒。對于微商來說拓提,也是如此。做得好的大咖一定有著他龐大而堅固的人脈圈隧膘。為什么成...
    欣姐的微商干貨鋪閱讀 260評論 0 0
  • 今天媽媽買了許多的獼猴桃代态,我迫不及待地拿出一個獼猴桃。仔細(xì)一看疹吃,獼猴桃是橢圓形的蹦疑。外邊兒還有許多毛呢?再摸一摸萨驶,感...
    康葉妃閱讀 443評論 0 0