2011-04-13 15 views
27

के साथ @ वैल्यू स्प्रिंग एनोटेशन का उपयोग करना मेरे पास एक ग्रोवी क्लास है जहां मैं एक संपत्ति मूल्य को स्वत: करने के लिए चाहता हूं।ग्रोवी

उदाहरण के लिए:

public @Value("${valueA}") String valueA; 
मेरी appliction संदर्भ में संपत्ति-प्लेसहोल्डर के अलावा के साथ

<context:property-placeholder location="classpath:spring/app.properties" /> 
app.properties

"valueA" के लिए सेट में तो सिद्धांत यह चाहिए एक मूल्य है रनटाइम पर मेरी कक्षा में स्ट्रिंग मान ए को पॉप्युलेट करें।

यह सेटअप पूरी तरह से काम करता है अगर मैं जावा क्लास का उपयोग करता हूं लेकिन अगर मैं ग्रोवी क्लास का उपयोग नहीं करता हूं।

Error: expected '$valueA' to be an inline constant of type java.lang.String in @org.springframework.beans.factory.annotation.Value
Error: Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.beans.factory.annotation.Value

मैं सिर्फ अगर ऊपर वाक्य रचना जब एक ग्रूवी वर्ग का उपयोग कर सही है पता करने के लिए और रनटाइम पर @value पैरामीटर autowiring के लिए सही सिंटैक्स है क्या चाहते हैं नहीं तो:

मैं एक संकलन त्रुटि मिलती है।

+0

यह पूछने के लिए धन्यवाद। यह मुझे पागल की तरह चला रहा था लेकिन नीचे दिए गए जवाब चाल करते हैं। –

उत्तर

47

सिंगल कोट्स का उपयोग करें, यानी।

public @Value('${valueA}') String valueA 
+0

क्या ऐसा इसलिए है क्योंकि डबल कोट्स के साथ आपको स्ट्रिंग के बजाय एक GString मिलता है और प्रतिस्थापन गलत समय पर किया जाता है? –

+0

हां, मुझे विश्वास है। – sourcedelica

+0

धन्यवाद, इसने मुझे मेरी ग्रोवी परियोजना में प्रभावित किया। मुझे संदेह है कि यह जावा में नहीं होता है क्योंकि कोई GString प्रकार नहीं है। – Sion

23

$ Groring के रूप में एनोटेशन तर्क की व्याख्या करने के लिए ग्रोवी का उपयोग करने के बाद, आपको एक संकलन त्रुटि मिलती है। आप या तो \ $ से बच सकते हैं या सिंगल कोट्स का उपयोग कर सकते हैं।

+0

इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए –