久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

Spring ProtocolResolver策略接口示例

瀏覽:23日期:2023-09-08 17:05:01

ProtocolResolver是一個策略接口,可以用于自定義協議解析, 比如spring就有一個 “classpath:”開頭的特定協議(但是spring并不是自定義ProtocolResolver 實現來完成這個功能的)

@FunctionalInterfacepublic interface ProtocolResolver {@NullableResource resolve(String location, ResourceLoader resourceLoader);}

@FunctionalInterface:聲明該接口是一個函數式接口,主要用于編譯級錯誤檢查,加上該注解,該接口中只能定義唯一一個方法。

spring提供了ProtocolResolver機制,用于匹配自定義的文件schema來加載文件;而且不干擾ResourceLoader的機制,最重要的是它會添加到spring環境下的所有的loader中。我們只需要擴展一個ProtocolResolver類,并將它在合適的實際加入到ResourceLoader即可,此后加載properties文件時我們的ProtocolResolver總會被執行

具體用法如下:

自定義MyProtocolResolver,加載資源時,當我們輸入的資源路徑以path:開頭時,就會加載相對路徑下的config/下相應的資源。

public class MyProtocolResolver implements ProtocolResolver { public static final String PATH = 'path:'; @Override public Resource resolve(String location, ResourceLoader resourceLoader) { if (!location.startsWith(PATH)) return null; String realPath = location.substring(5); String classPath = 'classpath:config/' + realPath; return resourceLoader.getResource(classPath); }}

測試:

DefaultResourceLoader resourceLoader=new DefaultResourceLoader();resourceLoader.addProtocolResolver(new MyProtocolResolver());Resource resource = resourceLoader.getResource('path:config.txt');InputStream inputStream = resource.getInputStream();StringBuffer out = new StringBuffer();byte[] b = new byte[4096];for (int n; (n = inputStream.read(b)) != -1; ) {out.append(new String(b, 0, n));}System.out.println(out);

由此我們可以通過實現ProtocolResolver接口來定義我們自己的加載資源路徑,也可以自定義自己加載資源路徑的優先級。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 柘荣县| 乐业县| 钦州市| 若尔盖县| 靖西县| 安图县| 潜山县| 樟树市| 阿拉善盟| 庆云县| 淳安县| 芜湖市| 化德县| 习水县| 景德镇市| 沂水县| 新疆| 吉木萨尔县| 赞皇县| 和硕县| 宝丰县| 邻水| 东光县| 商城县| 大邑县| 株洲县| 合作市| 南宫市| 法库县| 济阳县| 双城市| 健康| 临海市| 惠东县| 达孜县| 石渠县| 西林县| 海伦市| 杂多县| 襄城县| 陈巴尔虎旗|