webx筆記-ResourceLoadingService使用

接上篇:
webx筆記-Resource

在實際開發(fā)中,ResourceLoadingService是直接接觸最多的接口,其屏蔽了內部的Loader和Resource相關細節(jié)

1.ResourceLoadingService接口定義

相比之前這么多的ResourceLoader,一個接口全部搞定

測試代碼

    @Test
    public void serviceTest() throws IOException {
        resourceLoadingService = (ResourceLoadingService) factory.getBean("testResource");
        Resource res = resourceLoadingService.getResource("test.txt");
        // 取得資源文件
        File file = resourceLoadingService.getResourceAsFile("test.txt");
        // 取得資源URL
        URL url = resourceLoadingService.getResourceAsURL("test.txt");
        // 取得資源輸入流
        InputStream stream = resourceLoadingService.getResourceAsStream("test.txt");
    }

ResourceLoadingService可以對標spring的DefaultResourceLoader

DefaultResourceLoader的測試代碼

    @Test
    public void testResourceLoader() throws IOException {
        ResourceLoader loader = new DefaultResourceLoader();
        Resource resource = loader.getResource("http://m2.xunbaozl.com/wxHome/selete.html");
        System.out.println(resource instanceof UrlResource); //true
        printContent(resource.getInputStream());
        //注意這里前綴不能使用“classpath*:”触创,這樣不能真正訪問到對應的資源敞曹,exists()返回false
        resource = loader.getResource("classpath:core/resources/test.txt");
        System.out.println(resource instanceof ClassPathResource); //true
        printContent(resource.getInputStream());
//        resource = loader.getResource(System.getProperty("user.dir")+"/src/main/resources/core/resources/test.txt");
//        System.out.println(resource instanceof ClassPathResource); //true
//        printContent(resource.getInputStream());
    }

當然ResourceLoadingService(下面稱RLS,簡寫方便)的實現遠遠沒這么簡單,從以上示例可以隱約感受到RLS肯定與ResourceLoader(webx)存在某種關聯關系,可以說RLS是其ResourceLoading的集大成者,包括了很多相關聯的功能,但對外只暴露一個接口服務,下面就慢慢剖析

2.RLS的定義

webx以解析schema的方式來定義RLS對象,如下定義

services:resource-loading表示RLS對象

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:services="http://www.alibaba.com/schema/services"
             xmlns:filters="http://www.alibaba.com/schema/services/resource-loading/filters"
             xmlns:loaders="http://www.alibaba.com/schema/services/resource-loading/loaders"
             xsi:schemaLocation="
                 http://www.alibaba.com/schema/services http://localhost:8080/schema/services.xsd
                 http://www.alibaba.com/schema/services/resource-loading/filters http://localhost:8080/schema/services-resource-loading-filters.xsd
                 http://www.alibaba.com/schema/services/resource-loading/loaders http://localhost:8080/schema/services-resource-loading-loaders.xsd
                 http://www.springframework.org/schema/beans http://localhost:8080/schema/www.springframework.org/schema/beans/spring-beans.xsd
             ">
    <services:resource-loading id="testResource">
        
    </services:resource-loading>
</beans:beans>

3.資源的定義

如果只定義services:resource-loading標簽的話,還無法使用相關接口方法查找資源,必須還要定義相關資源

3.1 定義WebappResourceLoader

使用resource定義資源,之后就可以加載其目錄下的資源了

    <services:resource-loading>
        <resource pattern="/"  internal="false">
            <loaders:webapp-loader />
        </resource>
    </services:resource-loading>

3.2 別名資源

使用resource-alias定義一個別名資源

    <services:resource-loading>
        <resource pattern="/"  internal="false">
            <loaders:webapp-loader />
        </resource>
        <resource-alias pattern="/specFolder" name="/myfolder" />
    </services:resource-loading>

當訪問specFolder目錄時,實際訪問的則是myfolder
如下示例

3.3 重定向資源

以下配置將/tf/cms重定向到myfolder目錄下

    <services:resource-loading id="testResource">
        <resource pattern="/tf/cms">
            <loaders:file-loader basedir="../myfolder" />
        </resource>
    </services:resource-loading>

其他的可以參考webx文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茎杂,隨后出現的幾起案子,更是在濱河造成了極大的恐慌摔竿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮尝,死亡現場離奇詭異,居然都是意外死亡饿序,警方通過查閱死者的電腦和手機勉失,發(fā)現死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來原探,“玉大人乱凿,你說我怎么就攤上這事⊙氏遥” “怎么了徒蟆?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵型型,是天一觀的道長段审。 經常有香客問我闹蒜,道長戚哎,這世上最難降的妖魔是什么嫂用? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任型凳,我火速辦了婚禮,結果婚禮上嘱函,老公的妹妹穿的比我還像新娘。我一直安慰自己往弓,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布函似。 她就那樣靜靜地躺著槐脏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撇寞。 梳的紋絲不亂的頭發(fā)上顿天,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天蔑担,我揣著相機與錄音牌废,去河邊找鬼啤握。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的授段。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼畴蒲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了模燥?” 一聲冷哼從身側響起掩宜,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牺汤,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體檐迟,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年溶其,在試婚紗的時候發(fā)現自己被綠了敦间。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶逃。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡厢绝,死狀恐怖,靈堂內的尸體忽然破棺而出昔汉,到底是詐尸還是另有隱情,我是刑警寧澤拴清,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贷掖,受9級特大地震影響,放射性物質發(fā)生泄漏苹威。R本人自食惡果不足惜驾凶,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一掷酗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泻轰,春花似錦、人聲如沸浮声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽至朗。三九已至,卻和暖如春锹引,著一層夾襖步出監(jiān)牢的瞬間矗钟,已是汗流浹背嫌变。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秸应,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓软啼,卻偏偏與公主長得像延柠,于是被迫代替她去往敵國和親祸挪。 傳聞我的和親對象是個殘疾皇子贞间,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容