我有一个必须用绝对路径名初始化的类。我想用路径名初始化它的是一个位于 WEB-INF 中的文件。
我正在使用 Spring 的 ContextLoaderListener 来启动这一切,因此我无法运行 Java 代码来从上下文中获取路径并将其粘贴到 ${whatever} 可以找到的位置。
考虑一些 bean 定义,例如:
<bean class="my.class">
<property name="somePath" value="/WEB-INF/a.txt"/>
</bean>
如果可能的话,我需要一种方法使该路径名通过 ServletContextResource 机制传递。类路径之类的似乎没有“前缀”:
在这种情况下,相信我,将项目放在类路径中无济于事。
编辑:
我去挖了bean类的源码,它已经接受了相关属性上的Resources。所以这里发生了一些荒谬的事情,就好像它找不到东西一样提示。为我调试调试器。
再次编辑:
所以,这原来是一个maven恶作剧,与Spring无关。为您的帮助而投票,并提出另一个问题。
最佳答案
我的偏好是修改此类以采用Resource
,而不是路径名。然后您可以使用以下方式注入(inject)它:
<property name="fileResource" value="/WEB-INF/path/to/file"/>
这样比较灵活,可以使用Resource
接口(interface)上的各种方法来获取底层文件路径名之类的东西,比如getFile().getAbsolutePath()
.
但是,如果修改目标类不可行,那么您需要某种方法将 Resource
转换为路径名。您可以为此使用 FactoryBean
,例如:
public class ResourcePathFactoryBean extends AbstractFactoryBean<String> {
private Resource resource;
@Required
public void setResource(Resource resource) {
this.resource = resource;
}
@Override
protected String createInstance() throws Exception {
return resource.getFile().getAbsolutePath();
}
@Override
public Class<?> getObjectType() {
return String.class;
}
}
然后您可以使用它来注入(inject)您的路径:
<bean id="myBean" class="com.MyBean">
<property name="path">
<bean class="com.ResourcePathFactoryBean">
<property name="resource" value="/WEB-INF/path/to/file"/>
</bean>
</property>
</bean>
关于java - 如何在 spring 中将属性设置为 WEB-INF 中的路径名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390872/