This question already has answers here:
Spring Expression Language (SpEL) with @Value: dollar vs. hash ($ vs. #)

(4个答案)


7年前关闭。




我具有以下 Spring 配置:

<context:property-placeholder location="classpath:commonSql.properties" />

现在在我的类里面,当我使用@value("#{someproperty}")时,它不起作用。然后,我改为@value("${someproperty}"),它起作用了。

根据this问题的答案,@value("#{someproperty}")是SpEL语法,它的功能和复杂性要高得多。它也可以处理属性(property)占位符,还有很多其他功能,但就我而言,为什么它不起作用?尽管简单的代码正在工作,但是如何同时使用$和#来评估值。

最主要的是@value("#{someproperty}")工作时@value("${someproperty}")不工作。

最佳答案

#{ }是一种表达语言功能,而${ }是一种简单的属性占位符语法。

表达语言意味着存在特定的语法,对象,变量等。

当您编写“#{someproperty}”时,实际上是指对象和表达式语言引擎会回答您:



这将起作用:

  @Value("#{'${someproperty}'}")

10-05 21:09