我希望以一种不会在Bean中创建对Spring接口/类依赖的方式注入类路径资源的URL。请问如何实现?
我希望以一种不会在Bean中创建对Spring接口/类依赖的方式注入类路径资源的URL。请问如何实现?
Spring可以隐式地将classpath:...
值转换为java.net.URL
:
public class Foo {
private URL url;
...
}
.
<bean class = "Foo">
<property name = "url" value = "classpath:..." />
</bean>
继续axtavt的回答,如果您允许在bean中使用Spring注释,可以像这样实现:
@Value("classpath:myClasspathLocation") private URL url;
通过扩展org.springframework.core.io.ClassPathResource实现自己的Spring资源,例如MyClasspathResource扩展ClassPathResource,将此类型注入到您的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>
几乎没有什么非Spring框架的东西可以与Spring的资源概念相媲美。
例如,您可以使用Guava的InputSupplier作为替代方案,但如果这样做,您将会错过强大的标准Spring功能。