我有以下弹簧配置:
<context:property-placeholder location="classpath:commonSql.properties" />
现在在我的课堂上,当我使用@value("#{someproperty}")
时,它无效。然后,我改为
@value("${someproperty}")
它有效。
根据this的回答,问题@value("#{someproperty}")
是SpEL语法,它更强大,更复杂。它还可以处理属性占位符,还有更多,但在我的情况下为什么它不起作用?虽然简单的是如何使用$和#来评估价值。
@value("#{someproperty}")
工作时主要是@value("${someproperty}")
无效。
答案 0 :(得分:4)
#{ }
是一种表达式语言功能,而${ }
是一种简单的属性占位符语法。
表达式语言意味着存在特定的语法,对象,变量等。
当你写#34;#{someproperty}&#34;时,你实际上是指对象而表达式语言引擎会回答你:
字段或财产&#39; someproperty&#39;在类型的对象上找不到 &#39; org.springframework.beans.factory.config.BeanExpressionContext&#39;
以下是可行的:
@Value("#{'${someproperty}'}")
答案 1 :(得分:0)
以下是spring的源代码,它显示了获取属性键的表达式,原因很明显,也许可以帮助你:)
/**
* Abstract base class for PropertyEditors that need
* to resolve placeholders in paths.
*
* <p>A path may contain ${...} placeholders, to be resolved as
* system properties: e.g. ${user.dir}.
*
* @author Juergen Hoeller
* @since 1.1.2
* @see #PLACEHOLDER_PREFIX
* @see #PLACEHOLDER_SUFFIX
* @see System#getProperty(String)
*/
public class AbstractPathResolvingPropertyEditor extends PropertyEditorSupport {
public static final String PLACEHOLDER_PREFIX = "${";
public static final String PLACEHOLDER_SUFFIX = "}";
protected static final Log logger = LogFactory.getLog(
AbstractPathResolvingPropertyEditor.class);
...etc