2013-04-17 59 views
7

我有下面的Spring配置:

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

现在在我的班级中,当我使用@value("#{someproperty}")时,它不起作用。然后,我改为 @value("${someproperty}"),它工作。

根据this的回答问题@value("#{someproperty}")是SpEL语法,它的功能和复杂度都很高。它也可以处理属性占位符,还有更多,但在我的情况下为什么它不起作用?虽然简单的工作是如何使用$和#来评估价值。

最主要的是@value("#{someproperty}")不工作,而@value("${someproperty}")正在工作。

+3

在这里看到: http://stackoverflow.com/questions/5322632/spring-expression-language-spel-with-value-dollar-vs-hash-vs –

+0

@Bob Flannigon根据的问题的答案两者都是相同的,所以两者都应该工作,但在这里它不工作,当我把# – Krushna

+0

Stackoverflow自己的['el'](http://stackoverflow.com/tags/el/info)标记有这方面的一些很好的信息 – andyb

回答

0

这里是春天的源代码显示了获取属性关键的表达,原因是很明显的,也许帮助你:)

/** 
* 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 
3

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

表达式语言表示存在特定的语法,对象,变量等。

当你想用“#{someproperty}”,你实际上指的是物体和表达式语言引擎回答你:

字段或属性“someproperty”不能 类型的对象发现“ org.springframework.beans.factory.config.BeanExpressionContext”

这里是什么工作:

@Value("#{'${someproperty}'}") 
相关问题