जावा में डिपेंडेंसी इंजेक्शन: शुरुआती लोगों के लिए — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में डिपेंडेंसी इंजेक्शन क्या है और इसकी आवश्यकता क्यों है?

\n\n

कल्पना करें कि आप एक घर बना रहे हैं। आपको ईंटें, सीमेंट और उपकरण चाहिए। यदि आप हर बार खुद मिट्टी निकालेंगे, ईंटें पकाएंगे और सीमेंट बनाएंगे, तो निर्माण में अनंत समय लगेगा। यह बहुत आसान है जब सामग्री पहले से तैयार हो और निर्माण स्थल पर पहुंचा दी जाए। जावा में डिपेंडेंसी इंजेक्शन (DI) बिल्कुल इसी तरह काम करता है — यह एक डिज़ाइन पैटर्न है जिसमें ऑब्जेक्ट बाहर से तैयार निर्भरताएँ प्राप्त करता है, न कि उन्हें स्वयं बनाता है।

\n\n

सरल शब्दों में: डिपेंडेंसी इंजेक्शन (निर्भरता इंजेक्शन) — यह तब होता है जब एक ऑब्जेक्ट दूसरे ऑब्जेक्ट को उसकी सभी आवश्यक निर्भरताएँ प्रदान करता है। क्लास अपनी निर्भरताएँ स्वयं बनाने के बजाय, उन्हें कंस्ट्रक्टर, सेटर या इंटरफ़ेस के माध्यम से प्राप्त करता है।

\n\n

डिपेंडेंसी इंजेक्शन इतना महत्वपूर्ण क्यों है?

\n\n
    \n
  • कोड का युग्मन कम करना: क्लासेस विशिष्ट कार्यान्वयन पर कठोर रूप से निर्भर नहीं रहती हैं।
  • \n
  • परीक्षण को सरल बनाना: आप यूनिट टेस्ट में वास्तविक ऑब्जेक्ट को आसानी से मॉक (mock-ऑब्जेक्ट) से बदल सकते हैं।
  • \n
  • पुन: उपयोग क्षमता बढ़ाना: एक ही क्लास का उपयोग विभिन्न संदर्भों में किया जा सकता है।
  • \n
  • पठनीयता में सुधार: कोड अधिक समझने योग्य हो जाता है, और निर्भरताएँ स्पष्ट हो जाती हैं।
  • \n
\n\n

डिपेंडेंसी इंजेक्शन के बिना समस्या: एंटी-पैटर्न "कठोर युग्मन"

\n\n

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

\n\n
// DI के बिना क्लास — खराब उदाहरण\npublic class EmailService {\n    public void sendEmail(String message) {\n        System.out.println("ईमेल भेजा जा रहा है: " + message);\n    }\n}\n\npublic class NotificationService {\n    private EmailService emailService;\n\n    public NotificationService() {\n        // समस्या: क्लास के अंदर ही निर्भरता बना रहे हैं\n        this.emailService = new EmailService();\n    }\n\n    public void sendNotification(String message) {\n        emailService.sendEmail(message);\n    }\n}
\n\n

इस कोड में क्या समस्या है?

\n\n
    \n
  • कठोर युग्मन: NotificationService EmailService से मजबूती से जुड़ा है। यदि आप ईमेल के बजाय SMS भेजना चाहते हैं, तो क्लास को फिर से लिखना होगा।
  • \n
  • परीक्षण में कठिनाई: आप EmailService को टेस्ट स्टब (mock) से नहीं बदल सकते।
  • \n
  • एकल जिम्मेदारी के सिद्धांत का उल्लंघन: क्लास NotificationService न केवल सूचनाओं के लिए, बल्कि भेजने वाली सेवा बनाने के लिए भी जिम्मेदार है।
  • \n
\n\n

डिपेंडेंसी इंजेक्शन कैसे काम करता है: इंजेक्ट करने के तीन तरीके

\n\n

जावा में निर्भरता इंजेक्शन को लागू करने के तीन मुख्य तरीके हैं। आइए प्रत्येक को कोड उदाहरणों के साथ देखें।

\n\n

1. कंस्ट्रक्टर के माध्यम से इंजेक्शन (Constructor Injection)

\n\n

यह सबसे सामान्य और अनुशंसित तरीका है। निर्भरताएँ कंस्ट्रक्टर के पैरामीटर के माध्यम से पारित की जाती हैं।

\n\n
// लचीलेपन के लिए इंटरफ़ेस\npublic interface MessageService {\n    void sendMessage(String message);\n}\n\n// ईमेल के लिए कार्यान्वयन\npublic class EmailService implements MessageService {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println("ईमेल भेजा गया: " + message);\n    }\n}\n\n// SMS के लिए कार्यान्वयन\npublic class SmsService implements MessageService {\n    @Override\n    public void sendMessage(String message) {\n        System.out.println("SMS भेजा गया: " + message);\n    }\n}\n\n// कंस्ट्रक्टर के माध्यम से DI वाला क्लास\npublic class NotificationService {\n    private final MessageService messageService;\n\n    // कंस्ट्रक्टर के माध्यम से निर्भरता इंजेक्शन\n    public NotificationService(MessageService messageService) {\n        this.messageService = messageSe                

ब्लॉग

पुस्तक अनुशंसाएँ