gpt4 book ai didi

spring - 如何在属性占位符中禁用属性值的插值

转载 作者:行者123 更新时间:2023-12-01 11:02:46 25 4
gpt4 key购买 nike

我在我的应用程序上下文中使用 Spring 3 和 Spring 的属性占位符:
<context:property-placeholder location="my.properties"/>
my.properties 包含:

key1=value1
key2=some JSP code ${some-model-attr}

问题是, my.properties 中的值还针对占位符进行评估,但在我的情况下,这些值包含 JSP EL,这会在 Spring 初始化期间导致“找不到属性”错误:
java.lang.IllegalArgumentException: Could not resolve placeholder 'some-model-attr'

到目前为止,我有这个解决方法,但它很难看:
key1=value1
key2=some JSP code #{'$'}{some-model-attr}

因此我的问题是:

是否可以告诉 Spring 不要插入属性占位符值,或者换句话说,不要递归地评估占位符?

最佳答案

看起来不可能告诉 Spring 不要递归地评估占位符。

占位符由 org.springframework.util.PropertyPlaceholderHelper 评估其中(在 Spring 3 中)包含以下行:

    // Recursive invocation, parsing placeholders contained in the placeholder key.
placeholder = parseStringValue(placeholder, placeholderResolver, visitedPlaceholders);

所以递归调用被硬编码到评估中。

但是我认为您可以更改占位符的默认前缀和后缀,以便为 Spring 占位符使用不同的语法。 <context:property-placeholder>只是构造 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 的一种便捷方式类,并且该类具有方法 setPlaceholderPrefix()setPlaceholderSuffix() .您可以使用这些方法将 Spring 占位符的语法更改为:
$[property]

代替
${property}

然后我希望 Spring 不会再解析你的 JSP 属性,因为它们的语法不同:
key2=some JSP code ${some-model-attr}

关于spring - 如何在属性占位符中禁用属性值的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com