138

${...}#{...}. _ Spring 的文档只使用了#{...},但是有很多使用${...}. 此外,当我开始使用 SpEL 时,我被告知要使用${...}它并且效果很好。

对于那些感到困惑的人,我如何使用它的一个例子是

@Component
public class ProxyConfiguration {

    @Value("${proxy.host}")
    private String host;
    @Value("${proxy.port}")
    private String port;

    :
}

和一些属性文件:

proxy.host=myproxy.host
proxy.port=8000

我的问题是:

  • 有什么区别还是一样?
  • 是否已弃用一个版本,所以我应该使用另一个版本?
4

4 回答 4

151

${...}是属性占位符语法。它只能用于取消引用属性。

#{...}SpEL 语法,它功能更强大,也更复杂。它还可以处理属性占位符,等等。

两者都是有效的,都没有被弃用。

于 2011-03-16T08:35:48.443 回答
7

${expr} --> 立即评估

#{expr} --> 延迟评估

立即评估意味着在第一次呈现页面后立即评估表达式并返回结果。延迟评估意味着使用表达式语言的技术可以在页面生命周期的稍后时间使用它自己的机制来评估表达式,只要它适合这样做。

完整参考这里

没有 JSP EL,JSP 使用 SpEL。SpEL 适合使用它的技术。

于 2013-11-21T22:56:53.463 回答
-2

尝试阅读这篇文章,它建议

“如果使用哈希,则每次在部分刷新中包含该元素时(即每次呈现)都会重新计算您的代码。如果您使用美元,则仅在最初加载页面时计算您的代码。但是这个已经扩展到 EL 之外,也扩展到 SSJS。在哈希或美元之后,花括号表示您的语言的开始和结束。这在我们稍后结合语言时将很重要。

于 2011-03-16T08:34:36.870 回答
-5

表达式语言规范 • 最终版本 - 2006 年 5 月 8 日

第2页:

eval 表达式是通过使用结构 ${expr} 或 #{expr} 形成的。EL 以完全相同的方式解析和评估这两种结构,即使它们在使用 EL 的技术中可能具有不同的含义。

于 2013-02-17T02:38:04.067 回答