SpringValue语言(SpEL)与@Value:美元与哈希($与#)
对于何时使用${...}
与#{...}
相比,我有点困惑。 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
我的问题是:
- 有什么不同或是一样的?
- 是弃用的一个版本,所以我应该使用另一个?
${...}
是属性占位符语法。 它只能用于取消引用属性。
#{...}
是SpEL语法 ,它的function和复杂度要高得多。 它也可以处理财产占位符,还有更多。
两者都是有效的,并且都不被弃用。
${expr}
– >立即评估
#{expr}
– >延迟评估
即时评估意味着评估expression式并在页面第一次呈现时立即返回结果。 延期评估意味着使用expression式语言的技术可以使用自己的机制在页面生命周期的某个时候评估expression式,只要这样做是合适的。
完整的参考
没有JSP EL,JSP使用SpEL。 SpEL符合使用它的技术。
尝试读这篇文章 ,这表明
“如果使用散列,那么每当元素包含在局部刷新中(即每次渲染时),都会重新计算代码。如果使用美元,则代码仅在页面初始加载时计算。已经超出了EL,也延伸到了SSJS,哈希值或者美元之后,大括号表示语言的开始和结束,这对我们后来结合语言来说是非常重要的。
expression式语言规范•最终版本 – 2006年5月8日
第2页:
一个evalexpression式是通过使用结构$ {expr}或#{expr}来形成的。 这两个构造都是由EL完全相同的方式进行分析和评估的,即使它们在使用EL的技术中可能有不同的含义。