2014-04-28 11 views
50

मैं एक वसंत सेम में निम्नलिखित है @value परिभाषित करने के लिए:कैसे के रूप में वैकल्पिक

@Value("${myValue}") 
private String value; 

मूल्य सही ढंग से इंजेक्ट किया जाता है। हालांकि, परिवर्तनीय को वैकल्पिक होना आवश्यक है, इसे कमांड लाइन पैरामीटर के रूप में पारित किया जाता है (जिसे सरल कॉमांडलाइनप्रॉपर्टी स्रोत का उपयोग करके स्प्रिंग संदर्भ में जोड़ा जाता है), और यह तर्क हमेशा मौजूद नहीं होगा।

मैं कोशिश की है दोनों के लिए एक डिफ़ॉल्ट मान प्रदान करने के लिए निम्नलिखित:

@Value("${myValue:}") 
@Value("${myValue:DEFAULT}") 

लेकिन प्रत्येक मामले में, जब भी वहाँ एक वास्तविक मूल्य है कोलन के बाद डिफ़ॉल्ट तर्क इंजेक्ट किया जाता है - यह प्रतीत होता है क्या ओवरराइड वसंत इंजेक्षन चाहिए।

@Value निर्दिष्ट करने का सही तरीका क्या है?

धन्यवाद

+0

यह बहुत अजीब है ... डिफ़ॉल्ट मान केवल डिफ़ॉल्ट मान के रूप में कार्य करना चाहिए (यानी जब संपत्ति परिभाषित नहीं की जाती है)। क्या आप अपना कथन जांच सकते हैं "वास्तविक मान होने पर भी डिफ़ॉल्ट मान इंजेक्शन दिया जाता है" (उदा। यदि पुरानी संकलित कक्षा नहीं है)? –

+4

'@ वैल्यू (" $ {some.prop:} ") 'मेरे लिए काम करता है। उस चर पर यह एकमात्र एनोटेशन है। – Zarathustra

+0

क्या आप अपनी एप्लिकेशन कॉन्फ़िगरेशन पोस्ट कर सकते हैं? –

उत्तर

91

कि @value की आवश्यकता नहीं है निर्दिष्ट करने के लिए सही तरीका क्या है? इस धारणा पर

कार्य है कि द्वारा 'की आवश्यकता नहीं' आप null तो मतलब ...

आप सही ढंग से उल्लेख किया है कि आप एक : चरित्र के अधिकार के लिए एक डिफ़ॉल्ट मान आपूर्ति कर सकते हैं। आपका उदाहरण @Value("${myValue:DEFAULT}") था।

आप डिफ़ॉल्ट मानों के रूप में सादे तारों तक ही सीमित नहीं हैं। आप SPEL एक्सप्रेशन का उपयोग कर सकते हैं, और null वापस जाने के लिए एक सरल एसपीईएल अभिव्यक्ति है:

@Value("${myValue:#{null}}") 
1

आप जावा 8 का उपयोग कर रहे हैं, तो आप अपने java.util.Optional वर्ग का लाभ ले सकते। तो फिर तुम एक अच्छे तरीके से देख सकते हैं कि मूल्य परिभाषित किया गया है या नहीं

@Value("${myValue:#{null}}") 
private Optional<String> value; 

,: तुम सिर्फ इस तरह से निम्न चर घोषित करने के लिए है

if (optional.isPresent()) { 
    // do something cool 
} 

आशा है कि यह मदद करता है!

संबंधित मुद्दे