Java URL协议:classpath:/?

15

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

这是Spring构造还是Java构造?

除了这个问题之外,我找不到任何文件说明。这个问题是关于在Java中从类路径加载资源的URL的:URL to load resources from the classpath in Java, 但它没有指示任何一种方式。

如果这是一个Java结构,有人能指向官方文档吗?


1
我建议阅读有关ResourceLoader抽象的内容:http://static.springsource.org/spring/docs/3.0.x/reference/resources.html#resources-resourceloader - Slava Semushin
2个回答

13

您可以始终注册URL处理程序。Java还具有file:///和jar:处理程序。此外,class.getResource默认会从类路径中读取。

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

显然这是一个spring功能。

"您可以在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
很棒的提示!我不知道你可以注册自己的处理程序(+1)!但是你是否知道classpath是Spring定义/注册的URL处理程序,还是随Java一起发行的?再次感谢! - IAmYourFaja
我认为这是Spring的内置功能(看那个链接)。 - Markus Mikkolainen

8

classpath:是特定于Spring的。Spring的资源解析机制(即 PathMatchingResourcePatternResolver 或其他实现)了解" classpath:" " classpath *:" 前缀。

它将其解析为 ClassPathResource 对象,这恰好实现了Spring的 Resource 接口。

除其他事项外, Resource 接口还具有 getInputStream()方法,可用于获取内容,而无需知道资源类型。

这与任何URL协议处理完全分离,因此您可能无法直接将其添加为协议处理程序。

但是,您可以将 ClassPathResource 类本身作为协议处理程序的一部分。


Spring文档中关于classpath:的说明:https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/resources.html - Joman68

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接