निर्भरता इंजेक्शन क्या है? - डिपेंडेंसी इंजेक्शन लागू करने का तरीका जानें



डिपेंडेंसी इंजेक्शन क्या है पर यह लेख स्प्रिंग बूट में हैंड्स-ऑन के साथ डिपेंडेंसी इंजेक्शन के लिए एक व्यापक गाइड है।

एक ऐसी दुनिया में जहां हम दिन-प्रतिदिन प्रोग्रामिंग भाषाओं के साथ काम कर रहे हैं, हम सभी अपने जीवन को आसान बनाने के लिए तरीकों और ट्रिक्स की खोज करते हैं। खैर, डिपेंडेंसी इंजेक्शन एक ऐसी तकनीक है जिसका उद्देश्य किसी अन्य वस्तु की निर्भरता प्रदान करके डेवलपर कोड को आसानी से मदद करना है। क्या है डिपेंडेंसी इंजेक्शन पर इस लेख में, मैं आपको इस तकनीक को विस्तार से समझने में मदद करूंगा।

इस लेख में निम्नलिखित विषयों को शामिल किया जाएगा:





तो, चलिए इस लेख के साथ शुरुआत करते हैं।

निर्भरता इंजेक्शन क्या है?

डिपेंडेंसी इंजेक्शन किसी वस्तु की किसी अन्य वस्तु की निर्भरता की आपूर्ति करने की क्षमता है।



अब, मुझे पूरा यकीन है, उपरोक्त तकनीकी परिभाषा से आप कुछ भी नहीं समझ पाए होंगे। इसलिए, मैं आपके लिए भ्रम स्पष्ट कर दूं।

जब आप निर्भरता शब्द सुनते हैं, तो आपके दिमाग में क्या आता है?

जाहिर है, कुछ सही समर्थन के लिए कुछ और पर भरोसा?



वैसे, प्रोग्रामिंग के मामले में भी ऐसा ही है।

प्रोग्रामिंग में निर्भरता एक दृष्टिकोण है जहां एक वर्ग दूसरे वर्ग की विशिष्ट कार्यक्षमता का उपयोग करता है। इसलिए, उदाहरण के लिए, यदि आप दो वर्गों ए और बी पर विचार करते हैं, और कहते हैं कि कक्षा ए कक्षा बी की कार्यात्मकताओं का उपयोग करता है, तो इसका अर्थ है कि कक्षा ए में कक्षा बी की निर्भरता है। अब, यदि आप जावा में कोडिंग कर रहे हैं तो आपको पता होना चाहिए। कि, आपको करना होगाकक्षा ए द्वारा वस्तुओं का उपयोग किए जाने से पहले कक्षा बी का एक उदाहरण बनाएं।

वर्गों के प्रकार - निर्भरता इंजेक्शन क्या है - एडुरका

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

  • ग्राहक वर्ग: यह आश्रित वर्ग है और सेवा वर्ग पर निर्भर है।

  • सेवा वर्ग: यह वर्ग ग्राहक वर्ग को एक सेवा प्रदान करता है।

  • इंजेक्टर क्लास: यह वर्ग क्लाइंट क्लास में सर्विस क्लास ऑब्जेक्ट को इंजेक्ट करने के लिए जिम्मेदार है

अब, आप समझ गए हैं कि डिपेंडेंसी इंजेक्शन क्या है, मुझे अगला आपको उस सिद्धांत के माध्यम से लेना चाहिए, जिस पर निर्भरता इंजेक्शन आधारित है।

नियंत्रण का उलटा

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

अगर मुझे आपको सरल शब्दों में समझाना है, तो एक उदाहरण पर विचार करें, जिसमें आपको खाना पकाने की क्षमता है। IoC सिद्धांत के अनुसार, आप नियंत्रण को उल्टा कर सकते हैं, इसलिए भोजन पकाने के बजाय, आप सीधे बाहर से ऑर्डर कर सकते हैं, जिसमें आप अपने दरवाजे पर भोजन प्राप्त करते हैं। इस प्रकार आपके द्वार पर आपके द्वारा दिए गए भोजन की प्रक्रिया को नियंत्रण का व्युत्क्रम कहा जाता है।

आपको अपने आप को पकाने की ज़रूरत नहीं है, इसके बजाय, आप भोजन का ऑर्डर कर सकते हैं और एक वितरण कार्यकारी को दे सकते हैं, आपके लिए भोजन वितरित कर सकते हैं। इस तरह, आपको अतिरिक्त जिम्मेदारियों का ध्यान नहीं रखना है और सिर्फ मुख्य काम पर ध्यान केंद्रित करना है।

अब, आप डिपेंडेंसी इंजेक्शन के पीछे के सिद्धांत को जानते हैं, मैं आपको डिपेंडेंसी इंजेक्शन के प्रकारों के माध्यम से बताता हूं।

निर्भरता इंजेक्शन के प्रकार

मुख्य रूप से तीन प्रकार के निर्भरता इंजेक्शन हैं:

  • कंस्ट्रक्टर इंजेक्शन: इस प्रकार के इंजेक्शन में, इंजेक्टर क्लाइंट क्लास कंस्ट्रक्टर के माध्यम से निर्भरता की आपूर्ति करता है।

  • सेटर इंजेक्शन / संपत्ति इंजेक्शन: इस प्रकार के इंजेक्शन में, इंजेक्टर विधि क्लाइंट द्वारा उजागर की गई सेटर विधि पर निर्भरता को इंजेक्ट करती है।

  • इंटरफ़ेस इंजेक्शन: इस प्रकार के इंजेक्शन में, इंजेक्टर क्लाइंट क्लास पर निर्भरता प्रदान करने के लिए इंटरफ़ेस का उपयोग करता है। क्लाइंट को एक इंटरफ़ेस लागू करना होगा जो एक को उजागर करेगासेटर विधिकौन कौन सेनिर्भरता को स्वीकार करता है।

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

निर्भरता इंजेक्शन के लाभ

इससे पहले कि मैं डिपेंडेंसी इंजेक्शन के लाभों को सूचीबद्ध करूं, आपको एक उद्योग स्तर पर इस इंजेक्शन की आवश्यकता के बारे में आपको समझाता हूं, ताकि आप लाभ को बेहतर तरीके से समझ सकें।

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

अब, यदि कंपनी पाठ और ऑडियो संदेशों को सहेजना चाहती है, तो क्या आपको लगता है कि यह वर्ग संदेश को बचा सकता है?

खैर, जवाब नहीं है?

क्योंकि, ईमेल वर्ग पाठ और ऑडियो संदेशों के मापदंडों को संभाल नहीं सकता है। ऐसे मामलों में, आपको कक्षा को फिर से बनाना होगा। अब, कक्षा को फिर से बनाना काफी बोझिल काम है, खासकर अगर आपको इसे नियमित रूप से करना है। इसके बजाय, यदि आप निर्भरता इंजेक्शन का उपयोग करते हैं, तो आप रन-टाइम पर ऑब्जेक्ट बदल सकते हैं। तो, इस तरह से, आपको कक्षा को फिर से बनाने की ज़रूरत नहीं है जो आगे आपको बहुत तरीकों से मदद करता है।

तो, अगर मुझे निर्भरता इंजेक्शन के लाभों को संक्षेप में प्रस्तुत करना है, तो निम्नलिखित लाभ हैं:

ठीक है, इसलिए अब आप डिपेंडेंसी इंजेक्शन के लाभों को जानते हैं, आइए हम आगे बढ़ते हैं और देखते हैं कि स्प्रिंग बूट का उपयोग करके डिपेंडेंसी इंजेक्शन कैसे लागू किया जाए।

स्प्रिंग बूट का उपयोग करके DI को कैसे लागू किया जाए?

स्टेप 1: अपने खुले ग्रहण आईडीई और एक बनाएँ स्प्रिंग बूट अनुप्रयोग राइट-क्लिक करके और चुनकर स्प्रिंग स्टार्टर प्रोजेक्ट । फिर प्रोजेक्ट के नाम का उल्लेख करें और क्लिक करें समाप्त

स्प्रिंग स्टार्टर प्रोजेक्ट प्राप्त करने के लिए, आपको एक्लिप्स मार्केटप्लेस से स्प्रिंग टूल सूट स्थापित करना होगा। मामले में, आपके पास स्प्रिंग टू सूट स्थापित नहीं है, आप मेरे लेख को देख सकते हैं ।

आप स्वचालित रूप से देखेंगे कि नीचे एक एप्लिकेशन फ़ाइल बनाई गई है।

चरण 2: अगला, उसी पैकेज में एक क्लास बनाएं। ऐसा करने के लिए फ़ाइल पर क्लिक करें -> चुनें कक्षा और उल्लेख है कक्षा का नाम। फिर पर क्लिक करें समाप्त । यह एक पैदा करेगा कक्षा फ़ाइल। यहाँ मैंने एक ग्राहक वर्ग बनाया है। नीचे देखें।

चरण 3: उसके बाद, हमें क्लास के लिए कुछ संपत्तियों में डाल दें। तो, हम कहते हैं, हम शामिल हैं ग्राहक आईडी, ग्राहक का नाम तथा कोर्स का नाम। नीचे दिए गए कोड का उल्लेख करें।

पैकेज com.example.demo // पैकेज का नाम सार्वजनिक वर्ग के ग्राहक {निजी इंट कस्टिड प्राइवेट स्ट्रिंग कनिष् क निजी स्ट्रिंग स्ट्रिंग नाम}

चरण 3.1: एक बार जब आप उस के साथ कर रहे हैं, तो आपको करना होगा गेट्टर और सेटर विधियाँ उत्पन्न करें इन गुणों के लिए। ऐसा करने के लिए, इन गुणों और सही क्लिक का चयन करें। उसके बाद चुनो स्रोत -> गेट्टर और सेटर के तरीके उत्पन्न करें।

अब तक का आपका कोड इस प्रकार होना चाहिए:

पैकेज com.example.demo सार्वजनिक वर्ग के ग्राहक {निजी इंट कस्टिड प्राइवेट स्ट्रिंग कनिजी निजी स्ट्रिंग आंगन सार्वजनिक int getCustid () {रिटर्न कस्टिड} सार्वजनिक शून्य सेटकस्टिड (इंट कस्टिड) {यह.कुसल = कस्टिड} सार्वजनिक स्ट्रिंग getCustname () {वापसी कस्टडी } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} सार्वजनिक शून्य setCoursename (स्ट्रिंग आंग्रेसन) {thisourourameame = coursename}}

अब, एक परिदृश्य पर विचार करें जहां आपको ग्राहकों के लिए एक ऑब्जेक्ट बनाना है और आप इसे मैन्युअल रूप से नहीं करना चाहते हैं। इस तरह के परिदृश्य में, जब भी आपको आवश्यकता होगी, वस्तुओं को प्राप्त करने के लिए, आपको निर्भरता इंजेक्शन का उपयोग करना होगा।

तो, अगला हम इस बात पर ध्यान देंगे कि हम इसे कैसे प्राप्त कर सकते हैं।

चरण 4: सबसे पहले, बदलो रन लाइन में आवेदन वर्ग फ़ाइल निम्नलिखित के लिए:

कॉन्फ़िगर करने योग्यApplicationContext संदर्भ = SpringApplication.run (DemoApplication.class, args)

नोट: यदि आपको एक त्रुटि मिलती है तो निम्न आयात करें:

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context .ConfigurableApplicationContext आयात करें

कोड की यह उपरोक्त रेखा निष्पादन के समय किसी वस्तु को लौटा देगी। अब एप्लिकेशन फ़ाइल में निम्न कोड जोड़ें।

ग्राहक c = reference.getBean (customers.class)

उपरोक्त पंक्ति, ग्राहक वर्ग की किसी वस्तु को वापस करने के लिए संकलक को बताएगी। नीचे देखें।

कदम 4.1: अब, यह जांचने के लिए कि यह काम कर रहा है या नहीं, आप ग्राहक वर्ग में वापस जा सकते हैं और एक विधि इस प्रकार जोड़ें:

सार्वजनिक शून्य प्रदर्शन () {System.out.println ('ऑब्जेक्ट सफलतापूर्वक लौटा')}

यह पद्धति सफल निष्पादन पर एक आउटपुट 'ऑब्जेक्ट रिटर्निंग सक्सेसफुल' प्रदर्शित करेगी।

चरण 4.2: इसके बाद, आपको एप्लिकेशन फ़ाइल पर वापस जाना होगा और निम्नलिखित का उल्लेख करना होगा:

c.display ()

इसके माध्यम से, आप प्रदर्शन विधि के संदर्भ के साथ ग्राहक वर्ग के ऑब्जेक्ट को कॉल कर रहे हैं। अब तक एप्लिकेशन वर्ग के कोड के लिए नीचे की छवि देखें:

अब, यदि आप इस परियोजना को निष्पादित करते हैं, तो आप एक देखेंगे प्रकार की कोई योग्यता बीन के अपवादऐसा इसलिए है क्योंकि आपने जिस ग्राहक वर्ग को परिभाषित किया है, वह स्प्रिंग बीन नहीं है यानी स्प्रिंग ऑब्जेक्ट नहीं है। नीचे देखें।

चरण 4.3: तो, स्प्रिंग कंटेनर को बताने के लिए, हमें ग्राहक वर्ग की एक वस्तु की आवश्यकता है। ऐसा करने के लिए, आपको उल्लेख करना होगा @Component एनोटेशन , ग्राहक वर्ग में। ग्राहक वर्ग का कोड निम्नानुसार होना चाहिए:

पैकेज com.example.demo import org.springframework.stereotype.Component @Component public class ग्राहक {निजी int custid निजी स्ट्रिंग custname निजी स्ट्रिंग coursename सार्वजनिक int getCustid () 'वापसी custid} सार्वजनिक शून्य setCidid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (स्ट्रिंग custname) {this.custname = custname} public String getCoursename () {return coursename} पब्लिक शून्य सेटकॉर्स्नाम (स्ट्रिंग coursename) {this.coursename = coursename} सार्वजनिक void प्रदर्शन () {System.out.println ('ऑब्जेक्ट सफलतापूर्वक लौटा')}}

फिर, जब आप ग्राहकों का उल्लेख करते हैं c = reference.getBean (customers.class) संकलक जाँच करेगा कि क्या कंटेनर में ग्राहक बीन उपलब्ध है या नहीं।

यदि बीन उपलब्ध है, तो स्प्रिंग फ्रेमवर्क आपके आवेदन में ग्राहक वस्तु को इंजेक्ट कर रहा है। तो, मूल रूप से, यह ऑब्जेक्ट स्प्रिंग फ्रेमवर्क द्वारा बनाया गया है, जिसे आगे एप्लिकेशन में उपयोग किया जा सकता है।

इसलिए, यदि मैं अभी इस परियोजना को कार्यान्वित करता हूं, तो आपको एक आउटपुट दिखाई देगा, जो ऑब्जेक्ट सफलतापूर्वक लौटा है। नीचे देखें।

यह मूल रूप से है कि आप डिपेंडेंसी इंजेक्शन कैसे लागू कर सकते हैं।

उदाहरण: निर्भरता इंजेक्शन, ऑटोवैड एनोटेशन का उपयोग करना

मुझे आशा है कि आप समझ गए होंगे कि स्प्रिंग बूट में डिपेंडेंसी इंजेक्शन कैसे काम करता है। अब, हम इस उदाहरण का विस्तार करते हैं और आगे देखते हैं कि अन्य वर्ग पर निर्भर एक वर्ग ने स्प्रिंग बूट में उस वर्ग की कार्यक्षमता का उपयोग कैसे किया।

स्टेप 1: कोई नया बनाएं कक्षा फ़ाइल , फिर से पैकेज पर राइट-क्लिक करें और चुनकर नया -> वर्ग। अब, नीचे दिए गए वर्ग के नाम का उल्लेख करें और उस पर क्लिक करें समाप्त।

चरण 2: अगला, हमें क्लास के लिए कुछ प्रॉपर्टीज में डालते हैं। तो, हम कहते हैं, हम शामिल हैं टेकआईडी, तकनीक। नीचे दिए गए कोड का उल्लेख करें।

पैकेज com.example.demo सार्वजनिक वर्ग टेक्नोलॉजीज {निजी इंट तकनीकी प्राइवेट स्ट्रिंग टेक्नाम}

चरण 2.1: एक बार जब आप उस के साथ कर रहे हैं, उत्पन्न करते हैं गेट्टर और सेटर विधियाँ फ़ाइल पर राइट-क्लिक करके इन गुणों के लिए और फिर चुनें स्रोत -> गेट्टर और सेटर विधियाँ उत्पन्न करें।

चरण 3: अब, हम कहते हैं, हमें एक विधि बनानी होगी जो प्रिंट करता है ” सफल “। उस कोड का उल्लेख करने के लिए:

सार्वजनिक शून्य तकनीक () {System.out.println ('सफल')}

अब तक का आपका कोड नीचे जैसा दिखना चाहिए:

पैकेज com.example.demo सार्वजनिक वर्ग टेक्नोलॉजीज {निजी int Techid Private String Techname सार्वजनिक int getTechid () {रिटर्न techid} सार्वजनिक शून्य setTechid (int techid) {this.techid = techid} सार्वजनिक स्ट्रिंग getTechname () {वापसी Techname} सार्वजनिक शून्य setTechname (स्ट्रिंग टेक्नाम) {this.techname = techname} सार्वजनिक शून्य तकनीक () {System.out.println ('सफल')}}

चरण 4: अब, कॉल करने के लिए तकनीक () विधि में ग्राहक वर्ग , आपको प्रौद्योगिकी वर्ग का एक ऑब्जेक्ट बनाना होगा। तो ग्राहक वर्ग में कोड की निम्नलिखित पंक्ति का उल्लेख करें:

निजी प्रौद्योगिकी

कदम 4.1: एक बार जब आप उस के साथ कर रहे हैं, उत्पन्न करते हैं गेट्टर और सेटर विधियाँ द्वारा इन गुणों के लिए फ़ाइल पर राइट-क्लिक करें और फिर चुनें स्रोत -> गेट्टर और सेटर विधियाँ उत्पन्न करें।

चरण 5: अगला, का उपयोग करने के लिए तकनीक () विधि , आपको उल्लेख करना है techdetail.tech () नीचे ग्राहक वर्ग की प्रदर्शन विधि । इसके अलावा, यह सुनिश्चित करने के लिए कि टेकडिटेल ऑब्जेक्ट का तत्काल उल्लेख किया गया है @Component एनोटेशन है प्रौद्योगिकी वर्ग। नीचे देखें।

अब, जब आप इस परियोजना को निष्पादित करते हैं, तो आप एक देखेंगे शून्य सूचक का अपवाद । ऐसा इसलिए है क्योंकि अब ए ग्राहक वर्ग प्रौद्योगिकी वर्ग पर निर्भर है और अभी तक यह प्रौद्योगिकी वर्ग के अस्तित्व को नहीं जानता है

इसलिए, टेक्नोलॉजीज वर्ग को पहचानने के लिए ग्राहक को सक्षम करने के लिए, आपको सम्मिलित करना होगा @ तत्काल एनोटेशन ग्राहक वर्ग में। ग्राहक वर्ग का आपका अंतिम कोड इस प्रकार होना चाहिए:

पैकेज com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotyp.Component @Component public class ग्राहक: इस प्राइवेट इंट कस्टिड प्राइवेट स्ट्रिंग कैंडिनेट प्राइवेट स्ट्रिंग कॉम्बिनेशन @Autowired प्राइवेट टेक्नोलॉजीज टेकडिटेल पब्लिक टेक्नोलॉजी टेक्नॉलॉजीज। ) {वापसी techdetail} सार्वजनिक शून्य सेटटेकडेटेल (टेक्नोलॉजीज techdetail) {this.techdetail = techdetail} सार्वजनिक int getCustid () {return custid} सार्वजनिक शून्य setCustid (int custid) {this.custid = custid} सार्वजनिक स्ट्रिंग getCustname () } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} सार्वजनिक शून्य setCoursename (स्ट्रिंग आंग्रेसन) {Thisouroursename = coursename} सार्वजनिक शून्य प्रदर्शन () {System.out.println} 'ऑब्जेक्ट सक्सेसफुल रिटर्न') Techdetail.tech ()}}

एक बार जब आप इन फ़ाइलों को निष्पादित करते हैं, तो आप आउटपुट को ऑब्जेक्ट रिटर्निंग सफ़ल और सक्सेसफुल के रूप में देखेंगे, जिसका अर्थ है कि कक्षाओं की हमारी निर्भरता पूरी हो गई है। नीचे देखें।

अब जब आप लेख के साथ कर रहे हैं, तो बाहर की जाँच करें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस टिप्पणी अनुभाग में इसका उल्लेख करें “डिपेंडेंसी इंजेक्शन क्या है? ' लेख और हम जितनी जल्दी हो सके आप को वापस मिल जाएगा।

linux व्यवस्थापक भूमिकाएँ और जिम्मेदारियाँ