복붙노트

[SPRING] @Value가있는 Spring Expression Language (SpEL) : 달러 대 해시 ($ vs. #)

SPRING

@Value가있는 Spring Expression Language (SpEL) : 달러 대 해시 ($ vs. #)

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

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

해결법

  1. ==============================

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

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

    # {...}은 SpEL 구문으로 훨씬 더 유용하고 복잡합니다. 또한 속성 자리 표시자를 처리 할 수 ​​있으며 훨씬 더 많은 기능을 제공합니다.

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

  2. ==============================

    2.$ {expr} -> 즉시 평가

    $ {expr} -> 즉시 평가

    # {expr} -> 지연된 평가

    여기에서 완전한 참조

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

  3. ==============================

    3.이 기사를 읽으십시오.

    이 기사를 읽으십시오.

    "해시가 사용되면 코드가 부분 새로 고침 (즉, 렌더링 될 때마다)에 포함될 때마다 코드가 다시 계산됩니다. 달러를 사용하면 페이지가 처음로드 될 때만 코드가 계산됩니다. 해시 또는 달러 후, 중괄호는 언어의 시작과 끝을 의미합니다. 나중에 언어를 결합 할 때 중요합니다. "

  4. ==============================

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

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

    2 쪽:

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

  5. from https://stackoverflow.com/questions/5322632/spring-expression-language-spel-with-value-dollar-vs-hash-vs by cc-by-sa and MIT license