【问题标题】:Injecting Spring Spel Expressions into bean properties将 Spring Spel 表达式注入 bean 属性
【发布时间】:2011-07-13 22:30:36
【问题描述】:

如何在不让上下文将字符串属性解释为 spel 可解析值的情况下,将作为 spel 表达式的字符串注入应用程序上下文 bean 属性。

<bean id="x" p:spelExpression="${#code}/${#value}"/>

我希望该类的 setter 属性采用字符串参数并创建一个可重用的 SpelExpression 作为 bean 的私有属性,但是,spring 应用程序上下文似乎将 #variableName 识别为 spel 表达式并尝试解释该表达式在初始化时。

我发现 Spel 解释非常有用,但也想在内部使用 spel,并将表达式注入到我自己的 bean 中。

是否可以禁用 bean 甚至整个上下文文件(可能带有一些命名空间的恶作剧)的 Spel 解释,而不必禁用或修改整个应用程序上下文的 spel 表达式解析。

【问题讨论】:

    标签: spring spring-el


    【解决方案1】:

    #{...} 是 xml 上下文中拼写解释器的标记。

    我不明白:${#code}/${#value}。好的是#{code/value},据我了解,如果 codevalue 是 id。

    所以,如果你想要一个不解释的 spel 表达式,请将字符串 code/value 放入 xml。

    【讨论】:

    • 这个问题真的和XML没有任何关系。我希望能够在使用 Spel 表达式的应用程序上下文中创建一个 bean。我不希望 spel 表达式被应用程序上下文解释。这是给豆子用的。例如,bean 将创建一个表达式,然后在循环中迭代一个调用 expression.getValue(currentCollectionItem) 的集合。
    • 我不明白:你说它不是 XML,我在你的问题中看到一个 XML 文本?如果没有 xml,只有字符串,则输入字符串 spel 表达式...在您的示例中,它是 code/value,或者可能是 @code/@value,取决于 codevalue 是什么。也许提供一些代码(没有 xml?)?
    • *它不是 xml 它是一个模板解析器上下文来生成一个字符串。另一个示例是 URL 路径,例如 code=x,value=y 将生成字符串“x/y”。问题的关键仍然是如何将字符串表达式注入到 bean 中,而不是让它被应用上下文解释为评估的 spel 表达式。
    • 我还是不明白,抱歉 :-) 如果你有一个带有字符串属性的 bean,并且你做了myBean.setMySpelExpression("fooAndMore"),它不会被任何东西解释。
    • 诀窍在于尝试使用应用程序上下文 xml 模拟 myBean.setMySpelExpression("${#code}/${#value}")。例如。 spring 上下文尝试使用 SpEL 为您解释属性值。您可以关闭整个上下文的拼写解释,但我希望有一个更有针对性的解决方案。
    猜你喜欢
    • 2018-01-27
    • 2011-09-09
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多