@Value ile Bahar İfade Dili (SpEL): dolar - karma ($ - #)


126

Ben kullanmak için zaman konusunda karıştı biraz kafam ${...}kıyasla #{...}. Spring'in dokümantasyonu yalnızca kullanır #{...}, ancak kullanılan pek çok örnek vardır ${...}. Ayrıca, SpEL ile başladığımda kullanmam söylendi ${...}ve iyi çalışıyor.

Kafası karışık olanlar için, onu nasıl kullandığıma bir örnek olurdu

@Component
public class ProxyConfiguration {

    @Value("${proxy.host}")
    private String host;
    @Value("${proxy.port}")
    private String port;

    :
}

ve bazı mülkiyet dosyası:

proxy.host=myproxy.host
proxy.port=8000

Sorularım:

  • farklılıklar nelerdir yoksa aynı mı?
  • bir sürüm kullanımdan kaldırıldı, bu yüzden diğerini kullanmalıyım?

Yanıtlar:


140

${...}özellik yer tutucusu sözdizimidir. Yalnızca özelliklerin referansını kaldırmak için kullanılabilir.

#{...}olduğu SPEL sözdizimi çok daha yetenekli ve karmaşıktır. Ayrıca mülk yer tutucularını ve çok daha fazlasını işleyebilir.

Her ikisi de geçerlidir ve hiçbiri kullanımdan kaldırılmamıştır.


22
SpEL sözdizimini kullanarak özellik değerlerine başarılı bir şekilde erişmek için şu biçimi kullanın"#{'${property}'}"
Brice Roncace

1
Re: yukarıdaki yorum - bu yanıta
Steve Chambers

8

${expr} -> Anında Değerlendirme

#{expr} -> Ertelenmiş Değerlendirme

Anında değerlendirme, ifadenin değerlendirildiği ve sayfanın ilk oluşturulduğu anda sonucun döndürüldüğü anlamına gelir. Ertelenmiş değerlendirme, ifade dilini kullanan teknolojinin, uygun olduğunda sayfanın yaşam döngüsü içinde bir süre sonra ifadeyi değerlendirmek için kendi mekanizmasını kullanabileceği anlamına gelir.

Tam referans burada

JSP EL yok, JSP SpEL kullanıyor. SpEL, onu kullanan teknolojiye uyar.


6
Bir Java EE web teknolojisinden bahsediyorsunuz, soru ise Spring EL'leri kullanarak Spring yapılandırması hakkındaydı. Ve sonra, JSP SpEL kullanmaz, JSP'leri çalıştırmak için
Spring'e

3
JSP'de SpEL kullanan son ifade tamamen yanlıştır.
Michal M

2
Daha da açıklığa kavuşturmak için: JSP 2.1 sürümü itibariyle. SpEL için bir şablon görevi gören Birleşik EL docs.oracle.com/javaee/5/tutorial/doc/bnahq.html'yi destekler . Bahar belgesinden: "Bahar İfade Dili (kısaca SpEL), çalışma zamanında bir nesne grafiğini sorgulamayı ve değiştirmeyi destekleyen güçlü bir ifade dilidir. Dil sözdizimi Unified EL'e benzer, ancak en önemlisi yöntem çağırma ve temel olmak üzere ek özellikler sunar. dize şablonlama işlevi. "
Fritz Duchardt

-1

Okumayı deneyin bu makaleyi anlaşılacağı,

"Karma kullanılırsa, kodunuz bu öğe her kısmi yenilemeye dahil edildiğinde yeniden hesaplanır (yani, her oluşturulduğunda). Bir dolar kullanırsanız, kodunuz yalnızca sayfa ilk yüklendiğinde hesaplanır. Ancak bu sadece EL'in ötesine, SSJS'ye kadar genişletildi. Hash veya dolardan sonra, küme parantezleri dilinizin başlangıcını ve sonunu gösterir. Dilleri birleştirmeye daha sonra geldiğimizde bu önemli olacaktır. "


13
Hiçbirinin Spring EL ile ilgisi yok, JSP EL hakkında konuşuyor.
skaffman

@skaffman: haklı olsanız bile, tabii ki ilginç bir bilgi (en azından benim için ...).
sjngm

Başka bir cevap "JSP EL yok, JSP SpEL kullanıyor" diyor. Bu doğru mu?
Carl G

1
Java EE spesifikasyonunda, JSP'lerde ve JSF tarafından kullanılması amaçlanan bir "İfade Dili" (EL) vardır. Spring EL ile ilgisi yok.
gregfqt

-4

İfade Dili Spesifikasyonu • Son Yayın - 8 Mayıs 2006

Sayfa 2:

$ {İfade} veya # {ifade} yapıları kullanılarak bir eval-ifadesi oluşturulur. EL'yi kullanan teknolojide farklı anlamlar taşıyabilecek olsalar bile, her iki yapı da EL tarafından tamamen aynı şekilde ayrıştırılır ve değerlendirilir.


2
Sorumun hangi kısmına cevap vermesi gerekiyor? 2006'dan kalma ve "tam olarak aynı şekilde ayrıştırılıp değerlendirildi" ve "farklı anlamlar taşıyabilir" gibi kelimeler muhtemelen sizin de söyleyebileceğiniz kadar belirsizdir.
sjngm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.