वसंत अभिव्यक्ति भाषा (स्पेल) @ वैल्यू के साथ: डॉलर बनाम हैश ($ बनाम #)


126

जब मैं का उपयोग करने ${...}की तुलना में थोड़ा उलझन में हूँ #{...}। स्प्रिंग के प्रलेखन केवल उपयोग करता है #{...}, लेकिन ऐसे बहुत सारे उदाहरण हैं जो उपयोग करते हैं ${...}। इसके अलावा, जब मैंने स्पेल के साथ शुरुआत की तो मुझे उपयोग करने के लिए कहा गया था ${...}और यह ठीक काम करता है।

उन लोगों के लिए जो भ्रमित हैं, मैं इसका उपयोग कैसे करता हूं, इसका एक उदाहरण

@Component
public class ProxyConfiguration {

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

    :
}

और कुछ संपत्ति फ़ाइल:

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

मेरे प्रश्न हैं:

  • क्या अंतर हैं या क्या यह समान है?
  • क्या एक संस्करण को हटा दिया गया है, इसलिए मुझे दूसरे का उपयोग करना चाहिए?

जवाबों:


139

${...}संपत्ति प्लेसहोल्डर सिंटैक्स है। इसका उपयोग केवल गुण गुणों के लिए किया जा सकता है।

#{...}है स्पेल वाक्य रचना है, जो कहीं अधिक सक्षम और जटिल है। यह संपत्ति प्लेसहोल्डर्स को भी संभाल सकता है, और इसके अलावा भी बहुत कुछ।

दोनों मान्य हैं, और न ही पदावनत है।


22
स्पेल सिंटैक्स का उपयोग करके संपत्ति मूल्यों को सफलतापूर्वक एक्सेस करने के लिए, प्रारूप का उपयोग करें"#{'${property}'}"
Brice Roncace

1
पुन: ऊपर टिप्पणी - इस उत्तर को
स्टीव चैंबर्स

8

${expr} -> तत्काल मूल्यांकन

#{expr} -> आस्थगित मूल्यांकन

तत्काल मूल्यांकन का अर्थ है कि अभिव्यक्ति का मूल्यांकन किया जाता है और परिणाम जैसे ही पृष्ठ पहली बार प्रदान किया जाता है। आस्थगित मूल्यांकन का अर्थ है कि अभिव्यक्ति भाषा का उपयोग करने वाली तकनीक अपनी स्वयं की मशीनरी का उपयोग कुछ समय बाद पृष्ठ के जीवनचक्र के दौरान अभिव्यक्ति का मूल्यांकन करने के लिए कर सकती है, जब भी ऐसा करने के लिए उपयुक्त हो।

यहां पूरा संदर्भ

कोई JSP EL नहीं है, JSP SpEL का उपयोग करता है। स्पेल उस तकनीक का उपयोग करता है जो इसका उपयोग कर रही है।


6
आप जावा ईई वेब तकनीक के बारे में बात कर रहे हैं, जबकि सवाल स्प्रिंग ईएलएस का उपयोग करते हुए वसंत विन्यास के बारे में था। और फिर, JSP स्पेल का उपयोग नहीं करता है, आपको JSP चलाने के लिए स्प्रिंग की भी आवश्यकता नहीं है
gregfqt

3
स्पेल का उपयोग करने वाले JSP पर अंतिम कथन विशुद्ध रूप से गलत है।
मीकल एम।

2
आगे भी स्पष्ट करने के लिए: संस्करण 2.1 के रूप में JSP। यूनिफ़ाइड EL docs.oracle.com/javaee/5/tutorial/doc/bnahq.html का समर्थन करता है जो स्पेल के लिए एक टेम्प्लेट के रूप में कार्य करता है। वसंत की दशाओं से: "द स्प्रिंग एक्सप्रेशन लैंग्वेज (शॉर्ट के लिए स्पेल) एक शक्तिशाली अभिव्यक्ति भाषा है जो रनटाइम पर ऑब्जेक्ट ग्राफ़ को क्वेरी करने और हेरफेर करने का समर्थन करती है। भाषा सिंटैक्स यूनिफाइड ईएल के समान है, लेकिन अतिरिक्त सुविधाएँ प्रदान करता है, सबसे विशेष रूप से विधि आह्वान और बुनियादी। स्ट्रिंग टेम्प्लेटिंग कार्यक्षमता। "
फ्रिट्ज़ ड्यूचर्ड

-1

इस लेख को पढ़ने का प्रयास करें , जो सुझाव देता है

"यदि हैश का उपयोग किया जाता है, तो आपका कोड हर बार उस तत्व को फिर से जोड़ दिया जाता है जब तत्व आंशिक ताज़ा (यानी हर बार इसे प्रदान किया जाता है) में शामिल होता है। यदि आप एक डॉलर का उपयोग करते हैं, तो आपके कोड की गणना केवल तब की जाती है जब पृष्ठ शुरू में लोड होता है। लेकिन केवल EL से आगे SSJS तक भी बढ़ाया गया है। हैश या डॉलर के बाद, घुंघराले ब्रेसिज़ आपकी भाषा की शुरुआत और अंत को दर्शाते हैं। यह तब महत्वपूर्ण होगा जब हम बाद में भाषाओं के संयोजन के लिए आएंगे। "


13
स्प्रिंग ईएल से किसी का कोई लेना-देना नहीं है, यह JSP EL के बारे में बात कर रहा है।
स्कैफ़मैन

@skaffman: भले ही आप सही हैं, बेशक, यह एक दिलचस्प जानकारी है (कम से कम मेरे लिए ...)।
sjngm

एक अन्य जवाब में कहा गया है कि "कोई JSP EL नहीं है, JSP SpEL का उपयोग करता है"। क्या वो सही है?
कार्ल जी।

1
जावा ईई कल्पना में एक "अभिव्यक्ति भाषा" (ईएल) है जिसका उपयोग जेएसपी और जेएसएफ द्वारा किया जाता है। इसका स्प्रिंग एएल के साथ कोई लेना-देना नहीं है।
gregfqt

-4

अभिव्यक्ति भाषा विशिष्टता • अंतिम रिलीज़ - 8 मई, 2006

पृष्ठ 2:

एक स्पष्ट अभिव्यक्ति का निर्माण $ {expr} या # {expr} के निर्माण से किया जाता है। ईएल द्वारा दोनों निर्माणों को पार्स और मूल्यांकन किया गया है, भले ही वे ईएल का उपयोग कर रहे तकनीक में अलग-अलग अर्थ ले सकते हैं।


2
मेरे प्रश्न के किस भाग का उत्तर देना है? यह 2006 से है और "पार्स और मूल्यांकन किया गया है" जैसे शब्द "और विभिन्न अर्थों को ले जा सकते हैं" जैसा कि अस्पष्ट है शायद आप इसे डाल सकते हैं।
sjngm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.