Язык весенних выражений (SpEL) с @Value: доллар против хэша ($ против #) - PullRequest
108 голосов
/ 16 марта 2011

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

Мои вопросы:

  • В чем различия или это одно и то же?
  • устарела одна версия, поэтому я должен использовать другую?

Ответы [ 4 ]

116 голосов
/ 16 марта 2011

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

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

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

10 голосов
/ 22 ноября 2013

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

#{expr} -> Отсроченная оценка

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

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

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

0 голосов
/ 17 февраля 2013

Спецификация языка выражений • Окончательный выпуск - 8 мая 2006 г.

Страница 2:

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

0 голосов
/ 16 марта 2011

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

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

...