成均馆绯闻下载,对钓鱼岛的看法,丁字裤走光
protocolresolver是一个策略接口,可以用于自定义协议解析, 比如spring就有一个 “classpath:”开头的特定协议(但是spring并不是自定义protocolresolver 实现来完成这个功能的)
@functionalinterface public interface protocolresolver { @nullable resource 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接口来定义我们自己的加载资源路径,也可以自定义自己加载资源路径的优先级。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在java 8 stream表达式实现if/else逻辑
Java中有界队列的饱和策略(reject policy)原理解析
网友评论