2013-04-17 7 views
7

Mam poniższej konfiguracji wiosny:

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

teraz w mojej klasie, kiedy używam @value("#{someproperty}"), to nie działa. Potem zmieniłem na @value("${someproperty}") i zadziałało.

Zgodnie z odpowiedzią this pytania @value("#{someproperty}") to składnia Spel, która jest znacznie bardziej wydajna i złożona. Może również obsługiwać obiekty zastępcze obiektów i wiele więcej, ale w moim przypadku, dlaczego nie działa? Podczas gdy prosty działa, jak obie wartości $ i # są używane do oceny wartości.

Najważniejsze jest to, że @value("#{someproperty}") nie działa, gdy działa @value("${someproperty}").

+3

Zobacz tutaj: http://stackoverflow.com/questions/5322632/spring-expression-language-spel-with-value-dollar-vs-hash-vs –

+0

@Bob Flannigon według odpowiedzi na pytania oba są takie same, więc oba powinny działać, ale tutaj nie działa, gdy wstawiam # – Krushna

+0

Znacznik własny Stackoverflow ['el'] (http://stackoverflow.com/tags/el/info) ma kilka świetnych informacji na ten temat – andyb

Odpowiedz

0

Oto kod źródłowy wiosny który przedstawia ekspresję uzyskanie klucza własności, a powodem jest dość oczywiste, może pomóc :)

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

#{ } jest cechą języka wypowiedzi, natomiast ${ } jest prosta składnia zastępcza właściwości.

Język wyrażenia oznacza, że ​​istnieje określona składnia, obiekty, zmienne i tak dalej.

Kiedy piszesz „# {someproperty}”, to faktycznie odnosząc się do obiektu i silnika języka ekspresji odpowiedzi Państwo:

pole lub właściwość „someproperty” nie można znaleźć obiektu typu ' org.springframework.beans.factory.config.BeanExpressionContext”

Oto co będzie działać:

@Value("#{'${someproperty}'}") 
Powiązane problemy