2012-08-17 154 views
9

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

这是Spring构造还是Java构造?

除了这个问题我找不到任何文档 - URL to load resources from the classpath in Java,这并不表示任何方式。

如果是Java构造,任何人都可以指向我的官方文档吗?

+0

我建议阅读关于'ResourceLoader'抽象:http://static.springsource.org/spring/docs/3.0.x/reference/resources.html#resources-resourceloader – 2012-08-22 20:59:09

回答

11

那么你可以随时注册URL处理程序。 Java也有一个file:///和jar:handler。另外class.getResource将默认从classpath中读取。

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.net.MalformedURLException:未知协议:类路径” (说的java 1.6)

+0

酷技巧!我不知道你可以注册自己的处理程序(+1)!但是,你知道'classpath'是否是Spring定义/注册的URL处理程序,或者它是否随Java一起提供?再次感谢! – IAmYourFaja 2012-08-17 13:22:17

+0

我认为这是一个内在的春天特征(看那里的链接) – 2012-08-17 13:28:46

4

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

它接受并解析为ClassPathResource对象,该对象碰巧实现弹簧Resource接口。

Resource接口,除此之外,有一个getInputStream()方法可用于获取内容,而不必知道它是什么类型的资源。

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

但是,您可能会使用ClassPathResource类本身作为协议处理程序的一部分。