Spring Expression Language (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

Мои вопросы:

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

person sjngm    schedule 16.03.2011    source источник


Ответы (4)


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

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

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

person skaffman    schedule 16.03.2011
comment
Для успешного доступа к значениям свойств с использованием синтаксиса SpEL используйте формат "#{'${property}'}" - person Brice Roncace; 06.04.2016
comment
Re: комментарий выше - также см. этот ответ - person Steve Chambers; 25.04.2018

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

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

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

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

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

person XvrCJ    schedule 21.11.2013
comment
Вы говорите о веб-технологии Java EE, в то время как вопрос касался конфигурации Spring с использованием Spring EL. И тогда JSP не использует SpEL, вам даже не нужен Spring для запуска JSP - person gregfqt; 18.03.2015
comment
Последнее утверждение о JSP, использующем SpEL, совершенно неверно. - person Michal M; 28.04.2015
comment
Для дальнейшего уточнения: JSP версии 2.1. поддерживает Unified EL docs.oracle.com/javaee/5/tutorial/doc /bnahq.html, который служил шаблоном для SpEL. Из документа Spring: Язык выражений Spring (сокращенно SpEL) - это мощный язык выражений, который поддерживает запросы и управление графом объекта во время выполнения. Синтаксис языка аналогичен Unified EL, но предлагает дополнительные функции, в первую очередь вызов метода и базовую функциональность шаблонов строк. - person Fritz Duchardt; 17.06.2015

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

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

person chrisp7575    schedule 16.03.2011
comment
Ничего из этого не имеет отношения к Spring EL, речь идет о JSP EL. - person skaffman; 16.03.2011
comment
@skaffman: хоть ты и прав, конечно, это интересная информация (по крайней мере, для меня ...). - person sjngm; 16.03.2011
comment
Другой ответ говорит, что JSP EL не существует, JSP использует SpEL. Это верно? - person Carl G; 29.10.2014
comment
В спецификации Java EE есть язык выражений (EL), который предназначен для использования в JSP и JSF. Это не имеет ничего общего с Spring EL. - person gregfqt; 18.03.2015

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

Страница 2:

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

person Mellon    schedule 17.02.2013
comment
На какую часть моего вопроса это должен ответить? Это из 2006 года, и такие слова, как «разбирается и оцениваются» точно так же и могут иметь разные значения, вероятно, настолько расплывчаты, насколько вы можете это сказать. - person sjngm; 17.02.2013