@Value를 사용하는 Spring Expression Language (SpEL) : 달러 대 해시 ($ 대 #)


126

${...}비해 언제 사용할 지에 대해 약간 혼란 스럽 습니다 #{...}. Spring의 문서는. 만 사용 #{...}하지만 ${...}. 또한 SpEL로 시작했을 때 사용하라는 지시를 받았으며 ${...}제대로 작동합니다.

헷갈리는 분들을 위해 제가 사용하는 방법의 예는

@Component
public class ProxyConfiguration {

    @Value("${proxy.host}")
    private String host;
    @Value("${proxy.port}")
    private String port;

    :
}

및 일부 속성 파일 :

proxy.host=myproxy.host
proxy.port=8000

내 질문은 다음과 같습니다.

  • 차이점은 무엇입니까 아니면 동일합니까?
  • 한 버전이 더 이상 사용되지 않으므로 다른 버전을 사용해야합니까?

답변:


139

${...}속성 자리 표시 자 구문입니다. 속성을 역 참조하는 데만 사용할 수 있습니다.

#{...}SpEL을 구 훨씬 더 유능하고 복잡하다. 또한 속성 자리 표시 자 등을 처리 할 수 ​​있습니다.

둘 다 유효하며 둘 다 더 이상 사용되지 않습니다.


22
SpEL을 구문을 사용하여 성공적으로 액세스 속성 값을 위해, 형식을 사용"#{'${property}'}"
브라이스 Roncace

1
Re : 위의 주석-또한 이 답변을
Steve Chambers

8

${expr} -> 즉각적인 평가

#{expr} -> 지연된 평가

즉시 평가는 표현식이 평가되고 페이지가 처음 렌더링되는 즉시 결과가 반환됨을 의미합니다. 지연된 평가는 표현 언어를 사용하는 기술이 자신의 기계를 사용하여 적절한시기에 페이지 수명주기 동안 언젠가 표현을 평가할 수 있음을 의미합니다.

여기에서 전체 참조

JSP EL이없고 JSP는 SpEL을 사용합니다. SpEL은 그것을 사용하는 기술에 적합합니다.


6
Java EE 웹 기술에 대해 이야기하고 있지만 질문은 Spring EL을 사용하는 spring config에 관한 것입니다. 그리고, JSP는 SpEL을 사용하지 마십시오, 당신도 봄이 JSP를 실행할 필요가 없습니다
gregfqt

3
SpEL을 사용하는 JSP의 마지막 문장은 완전히 잘못되었습니다.
Michal M

2
더 명확히하기 위해 : JSP (버전 2.1 기준). SpEL의 템플릿 역할을하는 Unified EL docs.oracle.com/javaee/5/tutorial/doc/bnahq.html 을 지원합니다 . Spring 문서에서 : "The Spring Expression Language (줄여서 SpEL)는 런타임시 객체 그래프 쿼리 및 조작을 지원하는 강력한 표현 언어입니다. 언어 구문은 Unified EL과 유사하지만 추가 기능, 특히 메서드 호출 및 기본을 제공합니다. 문자열 템플릿 기능. "
Fritz Duchardt 2015 년

-1

읽어보십시오 이 문서 제안,

"해시를 사용하면 해당 요소가 부분 새로 고침에 포함될 때마다 (즉, 렌더링 될 때마다) 코드가 다시 계산됩니다. 달러를 사용하면 페이지가 처음로드 될 때만 코드가 계산됩니다. 그러나 이것은 EL뿐만 아니라 SSJS까지 확장되었습니다. 해시 또는 달러 뒤의 중괄호는 언어의 시작과 끝을 나타냅니다. 나중에 언어를 결합 할 때 중요합니다. "


13
어느 것도 Spring EL과 관련이 없으며 JSP EL에 대해 이야기하고 있습니다.
skaffman 2011 년

@skaffman : 물론 당신 말이 맞더라도 흥미로운 정보입니다 (적어도 저에게는 ...).
sjngm

또 다른 대답 은 "JSP EL이없고 JSP는 SpEL을 사용합니다"라고 말합니다. 그 맞습니까?
Carl G

1
Java EE 스펙에는 JSP 및 JSF에서 사용되는 "표현 언어"(EL)가 있습니다. Spring EL과는 관련이 없습니다.
gregfqt

-4

Expression Language 사양 • 최종 릴리스-2006 년 5 월 8 일

2 쪽:

eval-expression은 $ {expr} 또는 # {expr} 구문을 사용하여 형성됩니다. 두 구조 모두 EL을 사용하는 기술에서 다른 의미를 가질 수 있지만 EL에 의해 정확히 동일한 방식으로 구문 분석되고 평가됩니다.


2
내 질문의 어느 부분이 대답해야합니까? 2006 년부터 "정확히 동일한 방식으로 구문 분석 및 평가"및 "다른 의미를 전달할 수 있음"과 같은 단어는 아마 여러분이 말할 수있을만큼 모호 할 것입니다.
sjngm 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.