2013-04-17 61 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}'}") 
相關問題