foo.bar
为 1,foo.foo
为 2,bar
为“foo”。以下构造:
<property name="boo" value="${${bar}.foo}"/>
用于使用 Spring-4,将属性
boo
设置为 2。
但是在 Spring-5.x 中它根本没有扩展——属性
boo
被分配了整个文字表达式字符串。
在不重构底层 Java 代码的情况下,最简单的修复是什么?
您在 Spring 5.x 中遇到的问题是由于与 Spring 4.x 相比,对嵌套属性占位符的处理更加严格,这样做是为了避免安全风险。
例如,您可以启用属性占位符的旧行为。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- others -->
<!-- Enable legacy placeholder behavior -->
<bean id="propertyAccessor" class="org.springframework.context.expression.BeanExpressionResolver" />
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="beanExpressionResolver" ref="propertyAccessor" />
</bean>
<!-- Your other configurations -->
<property name="boo" value="${${bar}.foo}"/>
</beans>
测试此解决方案,但请记住,维护默认的更严格行为通常更有利于安全性和可维护性。