2010-11-17 10 views
20

मेरे वसंत सेम एक अद्वितीय अनिवार्य तर्क के साथ एक निर्माता है का उपयोग करते हुए सेम निर्माता के लिए एक मूल्य सुई, और मैं एक्सएमएल विन्यास के साथ यह प्रारंभ करने में कामयाब रहे:कैसे एनोटेशन

<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters"> 
    <constructor-arg> 
    <value>OTA</value> 
    </constructor-arg> 
</bean> 

तो मैं इस तरह इस सेम का उपयोग और यह अच्छी तरह से काम करता है।

@Resource(name = "interfaceParameters#ota") 
private InterfaceParameters interfaceParameters; 

लेकिन मैं, जैसे

@Resource(name = "interfaceParameters#ota") 
@contructorArg("ota") // I know it doesn't exists! 
private InterfaceParameters interfaceParameters; 

यह संभव है कुछ annocations साथ contructor आर्ग मान निर्दिष्ट चाहते हैं?

अग्रिम धन्यवाद

+0

शायद जवाब दिया गया है [यहां] (http://stackoverflow.com/a/2306468/267197)। –

उत्तर

45

पहले, आप अपने सेम परिभाषा निर्माता आर्ग निर्दिष्ट करने के लिए है, और अपने इंजेक्शन अंक में नहीं। उसके बाद, आप उपयोग कर सकते हैं वसंत के @Value एनोटेशन (वसंत 3,0)

@Component 
public class DefaultInterfaceParameters { 

    @Inject 
    public DefaultInterfaceParameters(@Value("${some.property}") String value) { 
     // assign to a field. 
    } 
} 

This is also encouraged as Spring advises constructor injection over field injection.

जहां तक ​​मेरा समस्या देखते हैं, यह आप, के अनुरूप नहीं हो सकता है, क्योंकि आप एक ही कक्षा के एक से अधिक सेम परिभाषित करने के लिए दिखाई देते हैं, अलग नाम दिया गया। इसके लिए आप एनोटेशन का उपयोग नहीं कर सकते हैं, आपको इन्हें एक्सएमएल में परिभाषित करना होगा।

हालांकि मुझे नहीं लगता कि यह अलग-अलग बीन्स होने का अच्छा विचार है। आप केवल स्ट्रिंग मानों का बेहतर उपयोग करेंगे। लेकिन मैं अधिक जानकारी नहीं दे सकता, क्योंकि मैं आपकी सटीक कक्षाओं को नहीं जानता हूं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, "केवल स्ट्रिंग मानों का उपयोग करें" से आपका क्या मतलब है? – tbruyelle

+0

अच्छी तरह से, आपको "ओटीए" स्ट्रिंग की आवश्यकता है। इसके लिए आपको पूरी वस्तु की आवश्यकता नहीं है। – Bozho

+0

ओह, मैं देखता हूं, "ओटीए" स्ट्रिंग का उपयोग मेरी बीन की @ पोस्टस्टोनस्ट्रक्चर विधि में किया जाता है और यह बीन बनाने के लिए एक अनिवार्य जानकारी है। स्ट्रिंग का उपयोग डाटाबेस से डेटा को पुनर्प्राप्त करने के लिए किया जाता है। इस प्रकार के प्रत्येक बीन प्रत्येक स्ट्रिंग मान के लिए अलग-अलग डेटा लौटाएंगे। बीटीडब्ल्यू आप एक्सएमएल उपयोग के बारे में सही हैं, क्योंकि मैं एक ही कक्षा के लिए कई बीन परिभाषित करता हूं, मैं एनोटेशन का उपयोग नहीं कर सकता। – tbruyelle

1

रूप Bozho निर्माता के बजाय कहा, आर्ग आप संपत्ति ... @ PostConstruct के बाद ही सभी गुण सेट कर रहे हैं कहा जाता हो जाएगा सेट कर सकते हैं ... हां, तो आप अभी भी अपने स्ट्रिंग उपलब्ध होगा ...

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