IT박스

@Value가 포함 된 Spring Expression Language (SpEL) : 달러 대 해시 ($ 대 #)

itboxs 2020. 7. 20. 07:51
반응형

@Value가 포함 된 Spring Expression Language (SpEL) : 달러 대 해시 ($ 대 #)


${...}비해 사용시기에 대해 약간 혼란 스럽 습니다 #{...}. 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

내 질문은 :

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

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

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

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


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

#{expr} -> 연기 된 평가

즉각적인 평가는 표현식이 평가되고 페이지가 처음 렌더링되는 즉시 결과가 반환됨을 의미합니다. 연기 된 평가는 표현 언어를 사용하는 기술이 자체 기계를 사용하여 페이지 수명주기 중 나중에 필요할 때마다 표현식을 평가할 수 있음을 의미합니다.

여기에 완전한 참조

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


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

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


표현 언어 사양 • 최종 릴리스-2006 년 5 월 8 일

2 쪽:

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

참고 URL : https://stackoverflow.com/questions/5322632/spring-expression-language-spel-with-value-dollar-vs-hash-vs

반응형