
Spring IOC Container | Beans, @Component, @Autowired & @Bean | Spring Boot Full Course #5
Coder Army
Overview
यह वीडियो स्प्रिंग फ्रेमवर्क के कोर फंडामेंटल्स, विशेष रूप से डिपेंडेंसी इंजेक्शन (DI) और इन्वर्जन ऑफ कंट्रोल (IoC) पर केंद्रित है। यह बताता है कि स्प्रिंग का IoC कंटेनर कैसे ऑब्जेक्ट्स (जिन्हें बीन्स कहा जाता है) को मैनेज करता है, उन्हें कैसे बनाता है, और उनकी डिपेंडेंसी को कैसे इंजेक्ट करता है। वीडियो में एनोटेशन-आधारित कॉन्फ़िगरेशन (@Component, @Autowired, @Configuration, @ComponentScan) का उपयोग करके इसे लागू करने का तरीका दिखाया गया है, और जावा रिफ्लेक्शन API की भूमिका पर भी प्रकाश डाला गया है। यह कंस्ट्रक्टर, सेटर और फील्ड इंजेक्शन जैसे विभिन्न DI प्रकारों की भी व्याख्या करता है, जिसमें कंस्ट्रक्टर इंजेक्शन को सबसे अनुशंसित विधि के रूप में उजागर किया गया है। अंत में, यह एप्लिकेशन कॉन्टेक्स्ट के आंतरिक कामकाज और बीन्स के जीवनचक्र को समझने के लिए चरण-दर-चरण प्रक्रिया का वर्णन करता है।
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- स्प्रिंग फ्रेमवर्क डिपेंडेंसी इंजेक्शन (DI) और इन्वर्जन ऑफ कंट्रोल (IoC) जैसे कोर फंडामेंटल्स पर आधारित है।
- यह वीडियो बताता है कि स्प्रिंग IoC कंटेनर ऑब्जेक्ट्स (बीन्स) को कैसे मैनेज करता है, जो कि पिछले लेक्चर में बिना फ्रेमवर्क के देखे गए सिद्धांतों का एक प्रैक्टिकल इम्प्लीमेंटेशन है।
- IoC कंटेनर ऑब्जेक्ट्स को बनाता है, उनकी डिपेंडेंसी को इंजेक्ट करता है, और उनके पूरे जीवनचक्र के लिए जिम्मेदार होता है।
- DI का मतलब है कि एक क्लास अपनी डिपेंडेंसी (अन्य ऑब्जेक्ट्स) को खुद बनाने के बजाय बाहर से प्राप्त करती है।
- हार्ड-कोडिंग डिपेंडेंसी (जैसे `new PaymentService()`) सिंगल रिस्पांसिबिलिटी प्रिंसिपल को तोड़ती है और कोड को कम लचीला बनाती है।
- कंस्ट्रक्टर इंजेक्शन एक तरीका है जहां क्लास अपनी डिपेंडेंसी को कंस्ट्रक्टर के माध्यम से स्वीकार करती है।
- IoC का मतलब है कि ऑब्जेक्ट्स का निर्माण और प्रबंधन का नियंत्रण फ्रेमवर्क (जैसे स्प्रिंग) के पास होता है, न कि डेवलपर के पास।
- स्प्रिंग का IoC कंटेनर (जैसे `ApplicationContext`) सभी ऑब्जेक्ट्स (बीन्स) को मैनेज करता है, उन्हें बनाता है, और उनकी डिपेंडेंसी को इंजेक्ट करता है।
- डेवलपर को अब ऑब्जेक्ट बनाने या डिपेंडेंसी को मैन्युअल रूप से इंजेक्ट करने की आवश्यकता नहीं होती है; कंटेनर यह सब संभालता है।
- स्प्रिंग IoC कंटेनर के साथ काम करने के लिए `spring-context` डिपेंडेंसी की आवश्यकता होती है।
- स्प्रिंग फ्रेमवर्क में, कंटेनर द्वारा मैनेज किए जाने वाले ऑब्जेक्ट्स को 'बीन्स' कहा जाता है।
- हर बीन एक ऑब्जेक्ट होता है, लेकिन हर ऑब्जेक्ट बीन नहीं होता (केवल वे जिन्हें स्प्रिंग मैनेज करता है)।
- `@Component` एनोटेशन स्प्रिंग को बताती है कि एक क्लास को मैनेज किया जाना चाहिए (एक बीन के रूप में)।
- `@ComponentScan` एनोटेशन स्प्रिंग को बताती है कि किस पैकेज में `@Component` एनोटेटेड क्लासेस को खोजना है।
- यह एनोटेशन-आधारित कॉन्फ़िगरेशन, XML-आधारित कॉन्फ़िगरेशन की तुलना में अधिक आधुनिक और सामान्य तरीका है।
- जावा रिफ्लेक्शन API स्प्रिंग को रनटाइम पर क्लास के मेटाडेटा (जैसे फ़ील्ड्स, मेथड्स, एनोटेशन) को इंस्पेक्ट करने की अनुमति देता है।
- `ApplicationContext` स्प्रिंग में IoC कंटेनर का इंटरफ़ेस है।
- `AnnotationConfigApplicationContext` का उपयोग एनोटेशन-आधारित कॉन्फ़िगरेशन के साथ कंटेनर को इनिशियलाइज़ करने के लिए किया जाता है।
- `@Autowired` एनोटेशन का उपयोग डिपेंडेंसी को इंजेक्ट करने के लिए किया जाता है।
- यह कंस्ट्रक्टर, सेटर मेथड या फील्ड पर लगाया जा सकता है।
- कंस्ट्रक्टर इंजेक्शन को सबसे अनुशंसित तरीका माना जाता है क्योंकि यह डिपेंडेंसी को अनिवार्य बनाता है और टेस्टिंग को आसान बनाता है।
- कंटेनर शुरू होता है और कॉन्फ़िगरेशन क्लास (`AppConfig`) को पढ़ता है।
- यह `@ComponentScan` के आधार पर `@Component` एनोटेटेड क्लासेस को ढूंढता है।
- यह बीन्स की परिभाषाएँ (Bean Definitions) बनाता है, फिर ऑब्जेक्ट्स (बीन्स) को इंस्टैंशिएट करता है, और अंत में डिपेंडेंसी को इंजेक्ट करता है।
- कंक्रीट क्लासेस के बजाय इंटरफ़ेस पर डिपेंडेंसी इंजेक्ट करना कोड को अधिक लचीला और टेस्टेबल बनाता है।
- यह विभिन्न कार्यान्वयनों (जैसे `CardPaymentService`, `UPIServices`) के बीच स्विच करना आसान बनाता है।
- स्प्रिंग कंटेनर को यह तय करने की आवश्यकता होती है कि किस विशिष्ट कार्यान्वयन को इंजेक्ट करना है यदि एक से अधिक उपलब्ध हों (जैसे `@Qualifier` का उपयोग करके)।
Key takeaways
- स्प्रिंग का IoC कंटेनर ऑब्जेक्ट्स (बीन्स) के निर्माण और प्रबंधन को सेंट्रलाइज्ड करता है, जिससे डेवलपर को मैन्युअल ऑब्जेक्ट क्रिएशन और डिपेंडेंसी मैनेजमेंट से मुक्ति मिलती है।
- डिपेंडेंसी इंजेक्शन (DI) कोड को अधिक मॉड्यूलर, टेस्टेबल और मेंटेन करने योग्य बनाता है, जिससे क्लास केवल अपने मुख्य कार्य पर ध्यान केंद्रित कर सके।
- कंस्ट्रक्टर इंजेक्शन डिपेंडेंसी को इंजेक्ट करने का सबसे अनुशंसित तरीका है क्योंकि यह डिपेंडेंसी को अनिवार्य बनाता है, कोड को फाइनल वेरिएबल्स का उपयोग करने की अनुमति देता है, और यूनिट टेस्टिंग को सरल बनाता है।
- एनोटेशन जैसे `@Component`, `@ComponentScan`, और `@Autowired` स्प्रिंग को यह समझने में मदद करते हैं कि कौन से बीन्स को मैनेज करना है और उन्हें कैसे इंजेक्ट करना है।
- जावा रिफ्लेक्शन API स्प्रिंग को रनटाइम पर क्लास मेटाडेटा को इंस्पेक्ट करने और डायनामिक रूप से ऑब्जेक्ट्स बनाने में सक्षम बनाता है।
- कंक्रीट क्लासेस के बजाय इंटरफ़ेस पर डिपेंडेंसी इंजेक्ट करने से कोड अधिक लचीला बनता है और विभिन्न कार्यान्वयनों के बीच स्विच करना आसान हो जाता है।
Key terms
Test your understanding
- स्प्रिंग IoC कंटेनर डिपेंडेंसी इंजेक्शन को कैसे संभालता है और यह डेवलपर के लिए क्या लाभ प्रदान करता है?
- कंस्ट्रक्टर इंजेक्शन, सेटर इंजेक्शन और फील्ड इंजेक्शन के बीच मुख्य अंतर क्या हैं, और कंस्ट्रक्टर इंजेक्शन को सबसे अधिक अनुशंसित क्यों माना जाता है?
- स्प्रिंग फ्रेमवर्क में `@Component` और `@ComponentScan` एनोटेशन का क्या उद्देश्य है?
- जावा रिफ्लेक्शन API स्प्रिंग के IoC कंटेनर को ऑब्जेक्ट्स को मैनेज करने में कैसे मदद करता है?
- एप्लिकेशन कॉन्टेक्स्ट के संदर्भ में 'बीन' (Bean) का क्या अर्थ है और यह एक सामान्य जावा ऑब्जेक्ट से कैसे भिन्न है?