当前位置: 移动技术网 > IT编程>开发语言>Java > Spring ProtocolResolver策略接口示例

Spring ProtocolResolver策略接口示例

2020年05月13日  | 移动技术网IT编程  | 我要评论

成均馆绯闻下载,对钓鱼岛的看法,丁字裤走光

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接口来定义我们自己的加载资源路径,也可以自定义自己加载资源路径的优先级。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网