2010-09-16 8 views
16

मैं जानना चाहता हूं कि वसंत निर्भरता इंजेक्शन कैसे करता है। मैं निम्न स्तर तर्क का उपयोग करना चाहता हूँ।स्प्रिंग में निर्भरता इंजेक्शन कैसे काम करता है?

अपडेट:

मुझे पता है कि कैसे वस्तु संदर्भ कंस्ट्रक्टर्स या सेटर तरीकों को इंजेक्ट किया जाता चाहते हैं, प्रतिबिंब या कुछ बाइट कोड के स्तर के माध्यम से है।

+5

आप कोड को ओपन सोर्स के रूप में पढ़ सकते हैं। –

+0

@ वैसे भी मैं इसे पढ़ रहा हूँ। मैं सिर्फ एक सिंहावलोकन चाहता हूँ। –

+2

"मुझे जवाब कहीं और मिला है, जवाब बाइटकोड वाद्ययंत्र है।" - नहीं यह नहीं। 9 5% में वसंत प्रतिबिंब एपीआई का उपयोग करता है।बाइट कोड उपकरण का उपयोग केवल विशेष प्रकार के इंजेक्शन जैसे विधि लुकअप इंजेक्शन के लिए किया जाता है। –

उत्तर

9

निर्भरता विन्यास एक्सएमएल, एनोटेशन या जावा डीएसएल (JavaConfig) से पढ़ा जाता है। फिर स्प्रिंग डी इंजन जावा प्रतिबिंब एपीआई का उपयोग कर कॉन्फ़िगरेशन से मेटाडेटा के आधार पर निर्भरताओं को तार देता है।

+2

मैं जानना चाहता हूं कि यह निर्भरता कैसे तारित करता है। –

+1

जावा प्रतिबिंब API का उपयोग करना। मैंने उस जानकारी को उत्तर में जोड़ा। –

+1

जावा प्रतिबिंब एपीआई का उपयोग करके, वसंत समझ जाएगा कि उसे उस विशेष बिंदु पर निर्भरता डालना है, लेकिन यह निर्भरता वास्तव में कैसे सम्मिलित होती है? यह कुछ बाइटकोड स्तर परिवर्तन है? – flash

13

जावा घटक/वर्ग अन्य जावा कक्षाओं के जितना संभव हो उतना स्वतंत्र होना चाहिए। इससे इन वर्गों का पुन: उपयोग करने और उन्हें अन्य वर्गों (यूनिट परीक्षण) से स्वतंत्र रूप से परीक्षण करने की संभावना बढ़ जाती है। अन्य जावा घटकों से जावा घटकों को डीक्यूपल करने के लिए किसी निश्चित अन्य वर्ग की निर्भरता को इंजेक्शन दिया जाना चाहिए, बल्कि वर्ग स्वयं ही इस वस्तु को बनाता/पाता है।

कक्षा ए कक्षा बी के लिए निर्भरता है यदि कक्षा ए कक्षा बी को चर के रूप में उपयोग करता है।

यदि निर्भरता इंजेक्शन का उपयोग किया जाता है तो कक्षा बी को श्रेणी ए के निर्माता के माध्यम से कक्षा ए को दिया जाता है - इसे तब निर्माण इंजेक्शन कहा जाता है; या एक सेटर के माध्यम से - इसे फिर सेटर इंजेक्शन

निर्भरता इंजेक्शन की सामान्य अवधारणा को नियंत्रण में उलटा कहा जाता है। एक वर्ग को खुद को कॉन्फ़िगर नहीं करना चाहिए, लेकिन बाहर से कॉन्फ़िगर किया जाना चाहिए।

स्वतंत्र कक्षाओं/घटकों के आधार पर एक डिजाइन पुन: प्रयोज्यता और सॉफ़्टवेयर का परीक्षण करने की संभावना को बढ़ाता है। उदाहरण के लिए यदि कोई कक्षा ए डेटाबेस से डेटा प्राप्त करने के लिए दाओ (डेटा एक्सेस ऑब्जेक्ट) की अपेक्षा करता है तो आप आसानी से एक और टेस्ट ऑब्जेक्ट बना सकते हैं जो डेटाबेस कनेक्शन को मैक्स करता है और वास्तविक ऑब्जेक्ट कनेक्शन के बिना ए को परीक्षण करने के लिए इस ऑब्जेक्ट को इंजेक्ट करता है।

मानक जावा के साथ निर्भरता इंजेक्शन पर आधारित एक सॉफ्टवेयर डिज़ाइन संभव है।

वसंत केवल विन्यास प्रदान करने और बनाए गए वस्तुओं के संदर्भ को प्रबंधित करने का एक मानक तरीका प्रदान करके निर्भरता इंजेक्शन का उपयोग करने में कुछ सरलीकरण जोड़ता है।

अधिक जानकारी के लिए this

पढ़ Edit1:

स्प्रिंग उसके संदर्भ initializes जब यह सब सेम स्प्रिंग आवेदन context.xml फ़ाइल में उत्सुक परिभाषित पैदा करता है। अब मान लीजिए कि आपके बीन ए की बी की निर्भरता है तो बी का ओबज पहले से ही वसंत के साथ है क्योंकि इसे वसंत प्रारंभ के दौरान सफलतापूर्वक बनाया गया है। फिर वसंत कक्षा ए में सेटर विधि की खोज करेगा और वहां बी के ओब्जे को स्थापित करेगा।

EDIT2:

Please read 5.4.1 Setter Injection

+0

क्यों -1 ??? ???? –

+2

मैं पूछ रहा हूं कि "आप कन्स्ट्रक्टर में इंजेक्शन कैसे कर रहे हैं" –

+0

@ सुरेश एस संपादित –

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