Spring Язык выражений (SpEL) с @Value: доллар против хэша ($ против #)

Я немного смущен, когда следует использовать ${...} по сравнению с #{...}. В документации 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

${...} - синтаксис заполнителя свойства. Его можно использовать только для свойств разыменования.

#{...} Синтаксис SpEL, который намного более способен и сложнее. Он также может обрабатывать заполнители свойств и многое другое.

Оба действительны, и ни один из них не устарел.

Ответ 2

${expr} → Немедленная оценка

#{expr} → Отложенная оценка

Немедленная оценка означает, что выражение оценивается, и результат возвращается, как только страница сначала отображается. Отсроченная оценка означает, что технология, использующая язык выражений, может использовать свой собственный механизм для оценки выражения через некоторое время в течение жизненного цикла страниц, когда это целесообразно.

Полная ссылка здесь

Нет JSP EL, JSP использует SpEL. SpEL подходит для технологий, которые его используют.

Ответ 3

Попробуйте прочитать эту статью, в которой предлагается

"Если используется хеш, ваш код пересчитывается каждый раз, когда этот элемент включается в частичное обновление (т.е. каждый раз, когда он отображается). Если вы используете доллар, ваш код вычисляется только при начальной загрузке страницы Но это также было расширено за пределы EL, и SSJS. После хэша или доллара фигурные скобки обозначают начало и конец вашего языка. Это будет важно, когда мы придем к объединению языков позже".

Ответ 4

Спецификация языка выражения • Финальная версия - 8 мая 2006 г.

Страница 2:

Эваль-выражение формируется с использованием конструкций ${expr} или # {expr}. И то и другое конструкции анализируются и оцениваются точно так же с помощью EL, хотя они могут иметь различные значения в технологии, использующей EL.