Java Spring:为类路径资源注入URL

Java Spring:为类路径资源注入URL,java,spring,Java,Spring,我希望以一种不会在Bean中创建对Spring的依赖的方式注入classpath资源的URL。也就是说,bean不应该使用Spring的接口/类。我该怎么做呢?Spring能够隐式地将类路径:…值转换为java.net.URL: public class Foo { private URL url; ... } 几乎没有任何非弹簧的部件与之等效 例如,您可以使用的作为替代,但如果您这样做,您将缺少强大的标准spring功能。通过扩展org.springframework.co

我希望以一种不会在Bean中创建对Spring的依赖的方式注入classpath资源的URL。也就是说,bean不应该使用Spring的接口/类。我该怎么做呢?

Spring能够隐式地将
类路径:…
值转换为
java.net.URL

public class Foo {
    private URL url;
    ...
}


几乎没有任何非弹簧的部件与之等效


例如,您可以使用的作为替代,但如果您这样做,您将缺少强大的标准spring功能。

通过扩展org.springframework.core.io.ClassPathResource(如MyClasspathResource)来创建您自己的spring资源实现,并将此类型注入到您的bean中。这样,您对spring没有任何依赖性,以后可以用其他东西重新实现您的资源

<bean class="myBean">
 <property name="classPathType">
  <bean class="org.test.bla.MyClasspathResource">
   <constructor-arg index="0" value="classpath:/org/test/bla/MyUrl" />
  </bean>
 </property>
</bean>

根据axtavt的回答,如果您允许自己在bean中使用Spring注释,您可以这样做:

@Value("classpath:myClasspathLocation") private URL url;

你说的“URL”到底是什么意思?对于类路径资源,这是一个相当人工的概念-你会如何处理该URL?打开一个流并从ITI中读取如果它是一个类路径资源,为什么不直接注入路径本身呢?如果您不打算使用Spring资源抽象,它就没有什么价值。@skaffman,因为它是通过类路径定位的,这意味着通过bean工厂使用的类加载器定位的,如果您这样说的话,它与使用路径的bean的类加载器(由于委托)不同。我不相信这会起作用。原因:org.springframework.core.convert.conversion失败异常:无法将值“classpath:etc/warmup.xml”从类型“java.lang.String”转换为类型“java.net.URL”;嵌套异常为java.net.MalformedURLException:未知协议:classpath@IttayD:在春季3.0.2对我来说很好。请注意,路径必须指向现有资源。我查看了spring的源代码,看不出它在哪里处理“classpath:”URL有什么不同。从我所看到的情况来看,它只是尝试转换为URL。我找不到“classpath”@IttayD的任何URLStreamHandler实现:Spring使用
PropertyEditor
来转换属性值<代码>类路径:到
URL
的转换由
@Value("classpath:myClasspathLocation") private URL url;