에 ${...}
비해 언제 사용할 지에 대해 약간 혼란 스럽 습니다 #{...}
. 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까지 확장되었습니다. 해시 또는 달러 뒤의 중괄호는 언어의 시작과 끝을 나타냅니다. 나중에 언어를 결합 할 때 중요합니다. “
답변
Expression Language 사양 • 최종 릴리스-2006 년 5 월 8 일
2 쪽:
eval-expression은 $ {expr} 또는 # {expr} 구문을 사용하여 형성됩니다. 두 구조 모두 EL을 사용하는 기술에서 다른 의미를 가질 수 있지만 EL에 의해 정확히 동일한 방식으로 구문 분석되고 평가됩니다.