【问题标题】:Java URL Protocols: classpath:/?Java URL 协议:类路径:/?
【发布时间】:2012-08-13 22:47:58
【问题描述】:

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

这是 Spring 构造还是 Java 构造?

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

如果它是一个 Java 构造,谁能指出它的官方文档?

【问题讨论】:

标签: java spring classpath


【解决方案1】:

您可以随时注册 URL 处理程序。 Java 也有一个 file:/// 和 jar: 处理程序。默认情况下,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.net.MalformedURLException 中的异常:未知协议:类路径” (说java 1.6)

【讨论】:

  • 很酷的提示!我不知道您可以注册自己的处理程序(+1)!但是您知道classpath 是Spring 定义/注册的URL 处理程序,还是Java 附带的?再次感谢!
  • 我认为这是一个内置的弹簧功能(查看那里的链接)
【解决方案2】:

classpath:特定于 spring。 Spring 的资源解析机制(即PathMatchingResourcePatternResolver 或其他实现)知道"classpath:" 和“classpath*:”前缀。

它接受并解析为ClassPathResource 对象,该对象恰好实现了弹簧Resource 接口。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2014-05-09
    • 2012-02-17
    • 2018-01-09
    • 2019-10-04
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多