वसंत - निर्भरता इंजेक्शन

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

विचार करें कि आपके पास एक एप्लिकेशन है जिसमें एक पाठ संपादक घटक है और आप एक वर्तनी जांच प्रदान करना चाहते हैं। आपका मानक कोड कुछ इस तरह दिखाई देगा -

public class TextEditor {
   private SpellChecker spellChecker;
   
   public TextEditor() {
      spellChecker = new SpellChecker();
   }
}

हमने यहां जो कुछ किया है, वह TextEditor और SpellChecker के बीच निर्भरता पैदा करता है। नियंत्रण परिदृश्य के विलोम में, हम इसके बजाय कुछ ऐसा करेंगे -

public class TextEditor {
   private SpellChecker spellChecker;
   
   public TextEditor(SpellChecker spellChecker) {
      this.spellChecker = spellChecker;
   }
}

यहां, TextEditor को SpellChecker के कार्यान्वयन के बारे में चिंता नहीं करनी चाहिए। SpellChecker को स्वतंत्र रूप से लागू किया जाएगा और TextEditor इंस्टेंटेशन के समय TextEditor को प्रदान किया जाएगा। यह पूरी प्रक्रिया स्प्रिंग फ्रेमवर्क द्वारा नियंत्रित की जाती है।

यहां, हमने TextEditor से कुल नियंत्रण हटा दिया है और इसे कहीं और (यानी XML कॉन्फ़िगरेशन फ़ाइल) रखा है और निर्भरता (यानी वर्ग वर्तनी जाँचकर्ता) को TextEditor के माध्यम से कक्षा में इंजेक्ट किया जा रहा है Class Constructor। इस प्रकार नियंत्रण का प्रवाह निर्भरता इंजेक्शन (डीआई) द्वारा "उलटा" किया गया है क्योंकि आपने कुछ बाहरी प्रणाली पर निर्भरता को प्रभावी ढंग से निर्धारित किया है।

निर्भरता को इंजेक्ट करने का दूसरा तरीका है Setter MethodsTextEditor वर्ग की जहां हम एक SpellChecker उदाहरण बनाएंगे। इस उदाहरण का उपयोग TextEditor के गुणों को शुरू करने के लिए सेटर विधियों को कॉल करने के लिए किया जाएगा।

इस प्रकार, DI दो प्रमुख प्रकारों में मौजूद है और निम्नलिखित दो उप-अध्याय दोनों को उदाहरणों के साथ कवर करेंगे -

अनु क्रमांक। निर्भरता इंजेक्शन प्रकार और विवरण
1 कंस्ट्रक्टर-आधारित निर्भरता इंजेक्शन

कंस्ट्रक्टर-आधारित DI को तब पूरा किया जाता है जब कंटेनर एक क्लास कंस्ट्रक्टर को कई तर्कों के साथ आमंत्रित करता है, प्रत्येक दूसरे वर्ग पर निर्भरता का प्रतिनिधित्व करता है।

2 सेटर-आधारित निर्भरता इंजेक्शन

सेटर-आधारित DI को आपके सेम पर तत्काल तर्क निर्माता या नो-लॉजिक स्टैटिक फ़ैक्टरी विधि को लागू करने के बाद आपकी सेम पर सेटर कॉलिंग विधियों द्वारा पूरा किया जाता है।

आप कंस्ट्रक्टर-आधारित और सेटर-आधारित DI दोनों को मिला सकते हैं, लेकिन यह निर्भरता के लिए कंस्ट्रक्टर के तर्क का उपयोग करने और वैकल्पिक निर्भरता के लिए बसने के लिए अंगूठे का एक अच्छा नियम है।

कोड डीआई सिद्धांत के साथ क्लीनर है और डिकोडिंग अधिक प्रभावी है जब वस्तुओं को उनकी निर्भरता के साथ प्रदान किया जाता है। ऑब्जेक्ट अपनी निर्भरता को नहीं देखता है और निर्भरता के स्थान या वर्ग को नहीं जानता है, बल्कि स्प्रिंग फ्रेमवर्क द्वारा सब कुछ ध्यान रखा जाता है।