Spring上下文资源无法解析为url

时间:2015-04-30 05:47:42

标签: java spring

我有Spring's application-context.xmlcustom-context.xml覆盖它。 在custom-config.xml中,我创建了一个像这样的bean

<bean id="dir" class="org.springframework.core.io.ClassPathResource">
    <constructor-arg value="${root.smth:}/WEB-INF/mySecretFolder/"/>
</bean>

并将其用作此依赖

 <bean id="secretBean" class="com.project.secret">
    <constructor-arg ref="dir"/>
</bean>

它表示无法将${root.smth:}/WEB-INF/mySecretFolder/解析为网址。

我通过创建如下列表解决了这个问题:

<util:list id=dirList value-type="java.lang.String">
    <value>${root.smth:}/WEB-INF/mySecretFolder/</value>
</util:list>

并在构造函数中使用它:

public someConstr(@Value("#{dirList[0]}" Resource dir)
...

为什么?当我为它创建bean时为什么路径无法解决,当我把它放在列表中时可以解决它?是因为列表的类型为String吗?

2 个答案:

答案 0 :(得分:0)

我认为您需要在custom-context.xml中定义属性占位符,请尝试添加:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

PropertyPlaceholderConfigurer的功能是针对本地属性和/或系统属性和环境变量解析$ {...}占位符。 您可以参考Java doc

答案 1 :(得分:0)

解决资源构造函数中的路径可能存在问题。 也许这会奏效: 创建一个String类型的bean来包含已解析的路径,然后按如下方式引用它:

<bean id="path" class="java.Lang.String"> <constructor-arg value="${root.smth:}/WEB-INF/mySecretFolder/"/> </bean>

<bean id="dir" class="org.springframework.core.io.ClassPathResource"> <constructor-arg ref=path/> </bean>