Java URL Protocols: classpath:/?

2022-09-03 13:56:44

我见过一些Spring代码,它们使用URL协议直接从运行时类路径读取配置文件和其他资源。classpath:/some/path/to/resource

这是Spring构造还是Java构造?

除了这个问题之外,我找不到任何文档 - 从Java中的类路径加载资源的URL,这并不表示任何一种方式。

如果它是一个Java结构,任何人都可以向我指出它的官方文档吗?


答案 1

好吧,您始终可以注册URL处理程序。Java还有一个 file:/// 和jar:handler。此外,class.getResource 将默认从类路径读取。

http://code.google.com/p/madura-classpath-protocol-handler/

显然,这是一个弹簧功能。

“你可以在JDK的RT中看到这些标准处理程序和相关的实现类。JAR 文件。查找其完全限定名称以 sun.net.www.protocol 开头的类。例如,类 sun.net.www.protocol.http.handler 定义了 HTTP 协议处理程序。类 sun.net.www.protocol.ftp.Handler 定义了 FTP 协议处理程序类。

http://java.sun.com/developer/onlineTraining/protocolhandlers/

尝试在 Java 1.6 中使用会导致:classpath:

Exception in thread "main" java.net.MalformedURLException: unknown protocol: classpath


答案 2

类路径:特定于弹簧。Spring的资源解析机制(即 或其他 imlementations) 知道 和 “classpath*:” 前缀。PathMatchingResourcePatternResolver"classpath:"

它接受它并解析为对象,这些对象恰好实现了弹簧接口。ClassPathResourceResource

除其他事项外,该接口还具有一个可用于获取内容的方法,而无需知道它是什么类型的资源。ResourcegetInputStream()

这与任何 URL 协议处理完全分开,因此您不一定能够直接将其添加为协议处理程序。

但是,您可以对类本身作为协议处理程序的一部分进行一些使用。ClassPathResource


推荐