我有Spring's application-context.xml
和custom-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
吗?
答案 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>