2010-12-02 9 views
7

के साथ स्प्रिंग लुकअप विधि इंजेक्शन क्या स्प्रिंग लुकअप विधि पैरामीटर के साथ इंजेक्ट करने का कोई तरीका है? उदाहरण के लिए, मैं प्रोटोटाइप-स्कोप्ड बीन्स को कन्स्ट्रक्टर के माध्यम से मनमाने ढंग से पैरामीटर पास करते समय तत्काल सक्षम करना चाहता हूं।पैरामीटर

उत्तर

2

आप उन्हें फ़ील्ड/सेटर इंजेक्शन के माध्यम से इंजेक्ट कर सकते हैं। (ध्यान दें कि कन्स्ट्रक्टर इंजेक्शन वसंत द्वारा फेंक दिया गया है, हालांकि यह समर्थित है)

+0

कन्स्ट्रक्टर इंजेक्शन पर सेटर इंजेक्शन के लिए प्राथमिकता क्यों है? मैंने सोचा कि वे बराबर थे। –

+0

कन्स्ट्रक्टर इंजेक्शन तत्काल परिपत्र निर्भरता को कठिन बना सकता है। – Bozho

+0

@ बोझो: तो यह वास्तव में एक अच्छी बात है ... परिपत्र निर्भरता का उपयोग किया जाना चाहिए, है ना? – TWiStErRob

0

संक्षेप में, नहीं। वसंत "विधि इंजेक्शन" नामक कुछ का समर्थन करता है लेकिन यह आपके विचार से अलग है। वसंत भी कन्स्ट्रक्टर इंजेक्शन का समर्थन करता है, लेकिन फिर आप खुद को कन्स्ट्रक्टर नहीं बुला रहे हैं, वसंत है, और इसे स्वयं तारों से।

इसके बजाय, आप खुद के वर्ग का दृष्टांत और मनमाने ढंग से मानकों को पारित करने के लिए प्रतिबिंब का उपयोग कर सकते हैं:

Class<MyObject> clazz = MyObject.class; // this can be looked up or stored in a field, etc. 
MyObject myObject = clazz.getConstructor(String.class, int.class) 
         .newInstance("arbitrary parameter", 42); 
1

ऐसा लगता है कि इस महत्वपूर्ण सुविधा अंत में वसंत 4.1.0.RC2 में जोड़ा गया है। मैंने इसका परीक्षण किया है और ऐसा लगता है कि यह काम करता है।

यह JIRA टिकट SPR-7431 ("Passing lookup-method arguments to created bean constructor") के हिस्से के रूप में जोड़ा गया है:

< देखने-विधि /> पैरामीटर के किसी भी संख्या का उल्लेख करने की अनुमति चाहिए। इन पैरामीटर को सीधे नव निर्मित बीन के निर्माता को पास किया जाना चाहिए।

फीचर अंत में कैसे जोड़ा गया था, इस बारे में अधिक जानकारी के लिए, this blog post उस व्यक्ति ने लिखा था जिसने जिरा टिकट खोला था।