Spring 5.x中SpEL嵌套变量引用失效问题及最简修复方案
Spring 5.x 嵌套属性表达式解析问题的最简修复方案
在Spring 5.x中,默认属性解析器不再支持${${bar}.foo}这类双层嵌套的占位符直接解析,无需修改Java代码的最简修复方式是改用**Spring表达式语言(SpEL)**实现嵌套解析,有两种简洁写法可选:
写法一:
<property name="boo" value="#{${'${bar}'}.foo}"/>解析逻辑:
${'${bar}'}先解析出bar的取值"foo",再通过SpEL的#{}语法解析foo.foo对应的属性值2。写法二(逻辑更清晰):
<property name="boo" value="#{environment.getProperty(environment.getProperty('bar') + '.foo')}"/>解析逻辑:直接通过Spring环境对象
environment的getProperty方法,先获取bar的值,拼接.foo后再获取最终目标属性值。
若想完全恢复Spring 4的嵌套占位符解析行为,也可以自定义配置PropertyPlaceholderConfigurer Bean,但相比SpEL写法,这种方式需要额外配置代码,不够简洁。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

