NoteTube

Spring IOC Container | Beans, @Component, @Autowired & @Bean | Spring Boot Full Course #5
1:34:46

Spring IOC Container | Beans, @Component, @Autowired & @Bean | Spring Boot Full Course #5

Coder Army

9 chapters6 takeaways13 key terms5 questions

Overview

यह वीडियो स्प्रिंग फ्रेमवर्क के कोर फंडामेंटल्स, विशेष रूप से डिपेंडेंसी इंजेक्शन (DI) और इन्वर्जन ऑफ कंट्रोल (IoC) पर केंद्रित है। यह बताता है कि स्प्रिंग का IoC कंटेनर कैसे ऑब्जेक्ट्स (जिन्हें बीन्स कहा जाता है) को मैनेज करता है, उन्हें कैसे बनाता है, और उनकी डिपेंडेंसी को कैसे इंजेक्ट करता है। वीडियो में एनोटेशन-आधारित कॉन्फ़िगरेशन (@Component, @Autowired, @Configuration, @ComponentScan) का उपयोग करके इसे लागू करने का तरीका दिखाया गया है, और जावा रिफ्लेक्शन API की भूमिका पर भी प्रकाश डाला गया है। यह कंस्ट्रक्टर, सेटर और फील्ड इंजेक्शन जैसे विभिन्न DI प्रकारों की भी व्याख्या करता है, जिसमें कंस्ट्रक्टर इंजेक्शन को सबसे अनुशंसित विधि के रूप में उजागर किया गया है। अंत में, यह एप्लिकेशन कॉन्टेक्स्ट के आंतरिक कामकाज और बीन्स के जीवनचक्र को समझने के लिए चरण-दर-चरण प्रक्रिया का वर्णन करता है।

How was this?

Save this permanently with flashcards, quizzes, and AI chat

Chapters

  • स्प्रिंग फ्रेमवर्क डिपेंडेंसी इंजेक्शन (DI) और इन्वर्जन ऑफ कंट्रोल (IoC) जैसे कोर फंडामेंटल्स पर आधारित है।
  • यह वीडियो बताता है कि स्प्रिंग IoC कंटेनर ऑब्जेक्ट्स (बीन्स) को कैसे मैनेज करता है, जो कि पिछले लेक्चर में बिना फ्रेमवर्क के देखे गए सिद्धांतों का एक प्रैक्टिकल इम्प्लीमेंटेशन है।
  • IoC कंटेनर ऑब्जेक्ट्स को बनाता है, उनकी डिपेंडेंसी को इंजेक्ट करता है, और उनके पूरे जीवनचक्र के लिए जिम्मेदार होता है।
स्प्रिंग आर्किटेक्चर को समझने के लिए IoC और DI के इन मूल सिद्धांतों को समझना महत्वपूर्ण है, क्योंकि ये स्प्रिंग फ्रेमवर्क के कामकाज की नींव हैं।
ऑर्डर सर्विस क्लास को पेमेंट सर्विस क्लास की आवश्यकता होती है, और यह वीडियो दिखाता है कि कैसे स्प्रिंग इन डिपेंडेंसी को मैनेज कर सकता है।
  • DI का मतलब है कि एक क्लास अपनी डिपेंडेंसी (अन्य ऑब्जेक्ट्स) को खुद बनाने के बजाय बाहर से प्राप्त करती है।
  • हार्ड-कोडिंग डिपेंडेंसी (जैसे `new PaymentService()`) सिंगल रिस्पांसिबिलिटी प्रिंसिपल को तोड़ती है और कोड को कम लचीला बनाती है।
  • कंस्ट्रक्टर इंजेक्शन एक तरीका है जहां क्लास अपनी डिपेंडेंसी को कंस्ट्रक्टर के माध्यम से स्वीकार करती है।
DI कोड को अधिक मॉड्यूलर, टेस्टेबल और मेंटेन करने योग्य बनाता है, जिससे यह सुनिश्चित होता है कि क्लास केवल अपने मुख्य काम पर ध्यान केंद्रित करे।
ऑर्डर सर्विस क्लास पेमेंट सर्विस क्लास पर निर्भर करती है। DI का उपयोग करके, पेमेंट सर्विस का ऑब्जेक्ट ऑर्डर सर्विस के कंस्ट्रक्टर में इंजेक्ट किया जाता है, बजाय इसके कि ऑर्डर सर्विस खुद उसे बनाए।
  • IoC का मतलब है कि ऑब्जेक्ट्स का निर्माण और प्रबंधन का नियंत्रण फ्रेमवर्क (जैसे स्प्रिंग) के पास होता है, न कि डेवलपर के पास।
  • स्प्रिंग का IoC कंटेनर (जैसे `ApplicationContext`) सभी ऑब्जेक्ट्स (बीन्स) को मैनेज करता है, उन्हें बनाता है, और उनकी डिपेंडेंसी को इंजेक्ट करता है।
  • डेवलपर को अब ऑब्जेक्ट बनाने या डिपेंडेंसी को मैन्युअल रूप से इंजेक्ट करने की आवश्यकता नहीं होती है; कंटेनर यह सब संभालता है।
IoC कंटेनर एप्लिकेशन के ऑब्जेक्ट्स के जीवनचक्र को सेंट्रलाइज्ड तरीके से मैनेज करके जटिलता को कम करता है और डेवलपर को मुख्य व्यावसायिक तर्क पर ध्यान केंद्रित करने की अनुमति देता है।
मैन्युअल रूप से `new PaymentService()` और `new OrderService()` बनाने और उन्हें जोड़ने के बजाय, IoC कंटेनर इन ऑब्जेक्ट्स को खुद बनाता है और उन्हें आपस में जोड़ता है।
  • स्प्रिंग IoC कंटेनर के साथ काम करने के लिए `spring-context` डिपेंडेंसी की आवश्यकता होती है।
  • स्प्रिंग फ्रेमवर्क में, कंटेनर द्वारा मैनेज किए जाने वाले ऑब्जेक्ट्स को 'बीन्स' कहा जाता है।
  • हर बीन एक ऑब्जेक्ट होता है, लेकिन हर ऑब्जेक्ट बीन नहीं होता (केवल वे जिन्हें स्प्रिंग मैनेज करता है)।
सही डिपेंडेंसी को शामिल करना स्प्रिंग कंटेनर को कार्य करने के लिए आवश्यक आधार प्रदान करता है, और 'बीन्स' की अवधारणा को समझना स्प्रिंग के ऑब्जेक्ट मैनेजमेंट मॉडल को समझने के लिए महत्वपूर्ण है।
प्रोजेक्ट की `pom.xml` में `spring-context` डिपेंडेंसी को जोड़ना ताकि स्प्रिंग कंटेनर और बीन्स को मैनेज किया जा सके।
  • `@Component` एनोटेशन स्प्रिंग को बताती है कि एक क्लास को मैनेज किया जाना चाहिए (एक बीन के रूप में)।
  • `@ComponentScan` एनोटेशन स्प्रिंग को बताती है कि किस पैकेज में `@Component` एनोटेटेड क्लासेस को खोजना है।
  • यह एनोटेशन-आधारित कॉन्फ़िगरेशन, XML-आधारित कॉन्फ़िगरेशन की तुलना में अधिक आधुनिक और सामान्य तरीका है।
ये एनोटेशन स्प्रिंग को यह पहचानने में सक्षम बनाते हैं कि कौन से क्लास बीन्स बनने चाहिए और उन्हें कहां खोजना है, जिससे स्वचालित ऑब्जेक्ट निर्माण और प्रबंधन संभव होता है।
ऑर्डर सर्विस और पेमेंट सर्विस क्लासेस पर `@Component` एनोटेशन लगाना और `AppConfig` क्लास में `@ComponentScan(basePackages = "com.example.demo")` का उपयोग करना।
  • जावा रिफ्लेक्शन API स्प्रिंग को रनटाइम पर क्लास के मेटाडेटा (जैसे फ़ील्ड्स, मेथड्स, एनोटेशन) को इंस्पेक्ट करने की अनुमति देता है।
  • `ApplicationContext` स्प्रिंग में IoC कंटेनर का इंटरफ़ेस है।
  • `AnnotationConfigApplicationContext` का उपयोग एनोटेशन-आधारित कॉन्फ़िगरेशन के साथ कंटेनर को इनिशियलाइज़ करने के लिए किया जाता है।
रिफ्लेक्शन स्प्रिंग को डायनामिक रूप से ऑब्जेक्ट्स बनाने और मैनेज करने की शक्ति देता है, जबकि `ApplicationContext` कंटेनर के साथ इंटरैक्ट करने का मुख्य बिंदु है।
मेन मेथड में `ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);` का उपयोग करके IoC कंटेनर को इनिशियलाइज़ करना।
  • `@Autowired` एनोटेशन का उपयोग डिपेंडेंसी को इंजेक्ट करने के लिए किया जाता है।
  • यह कंस्ट्रक्टर, सेटर मेथड या फील्ड पर लगाया जा सकता है।
  • कंस्ट्रक्टर इंजेक्शन को सबसे अनुशंसित तरीका माना जाता है क्योंकि यह डिपेंडेंसी को अनिवार्य बनाता है और टेस्टिंग को आसान बनाता है।
विभिन्न इंजेक्शन प्रकारों को समझना आपको अपने कोड की आवश्यकताओं के अनुसार सबसे उपयुक्त और मजबूत डिपेंडेंसी मैनेजमेंट रणनीति चुनने में मदद करता है।
ऑर्डर सर्विस के कंस्ट्रक्टर पर `@Autowired` (या आधुनिक स्प्रिंग में इसके बिना भी यदि केवल एक कंस्ट्रक्टर है) का उपयोग करके पेमेंट सर्विस बीन को इंजेक्ट करना।
  • कंटेनर शुरू होता है और कॉन्फ़िगरेशन क्लास (`AppConfig`) को पढ़ता है।
  • यह `@ComponentScan` के आधार पर `@Component` एनोटेटेड क्लासेस को ढूंढता है।
  • यह बीन्स की परिभाषाएँ (Bean Definitions) बनाता है, फिर ऑब्जेक्ट्स (बीन्स) को इंस्टैंशिएट करता है, और अंत में डिपेंडेंसी को इंजेक्ट करता है।
कंटेनर के आंतरिक कार्यप्रवाह को जानने से यह समझने में मदद मिलती है कि स्प्रिंग कैसे काम करता है, जिससे डिबगिंग और अधिक जटिल कॉन्फ़िगरेशन को संभालना आसान हो जाता है।
कंटेनर द्वारा पेमेंट सर्विस और ऑर्डर सर्विस के ऑब्जेक्ट्स को बनाना, और फिर ऑर्डर सर्विस के कंस्ट्रक्टर में पेमेंट सर्विस के ऑब्जेक्ट को इंजेक्ट करना।
  • कंक्रीट क्लासेस के बजाय इंटरफ़ेस पर डिपेंडेंसी इंजेक्ट करना कोड को अधिक लचीला और टेस्टेबल बनाता है।
  • यह विभिन्न कार्यान्वयनों (जैसे `CardPaymentService`, `UPIServices`) के बीच स्विच करना आसान बनाता है।
  • स्प्रिंग कंटेनर को यह तय करने की आवश्यकता होती है कि किस विशिष्ट कार्यान्वयन को इंजेक्ट करना है यदि एक से अधिक उपलब्ध हों (जैसे `@Qualifier` का उपयोग करके)।
इंटरफ़ेस-आधारित DI लूज़ कपलिंग को बढ़ावा देता है, जिससे एप्लिकेशन को बदलना और विभिन्न परिदृश्यों के लिए अनुकूलित करना आसान हो जाता है।
ऑर्डर सर्विस पेमेंट सर्विस इंटरफ़ेस पर निर्भर करती है, और स्प्रिंग को यह तय करना होगा कि `CardPaymentService` या `UPIServices` में से किसे इंजेक्ट करना है।

Key takeaways

  1. 1स्प्रिंग का IoC कंटेनर ऑब्जेक्ट्स (बीन्स) के निर्माण और प्रबंधन को सेंट्रलाइज्ड करता है, जिससे डेवलपर को मैन्युअल ऑब्जेक्ट क्रिएशन और डिपेंडेंसी मैनेजमेंट से मुक्ति मिलती है।
  2. 2डिपेंडेंसी इंजेक्शन (DI) कोड को अधिक मॉड्यूलर, टेस्टेबल और मेंटेन करने योग्य बनाता है, जिससे क्लास केवल अपने मुख्य कार्य पर ध्यान केंद्रित कर सके।
  3. 3कंस्ट्रक्टर इंजेक्शन डिपेंडेंसी को इंजेक्ट करने का सबसे अनुशंसित तरीका है क्योंकि यह डिपेंडेंसी को अनिवार्य बनाता है, कोड को फाइनल वेरिएबल्स का उपयोग करने की अनुमति देता है, और यूनिट टेस्टिंग को सरल बनाता है।
  4. 4एनोटेशन जैसे `@Component`, `@ComponentScan`, और `@Autowired` स्प्रिंग को यह समझने में मदद करते हैं कि कौन से बीन्स को मैनेज करना है और उन्हें कैसे इंजेक्ट करना है।
  5. 5जावा रिफ्लेक्शन API स्प्रिंग को रनटाइम पर क्लास मेटाडेटा को इंस्पेक्ट करने और डायनामिक रूप से ऑब्जेक्ट्स बनाने में सक्षम बनाता है।
  6. 6कंक्रीट क्लासेस के बजाय इंटरफ़ेस पर डिपेंडेंसी इंजेक्ट करने से कोड अधिक लचीला बनता है और विभिन्न कार्यान्वयनों के बीच स्विच करना आसान हो जाता है।

Key terms

Inversion of Control (IoC)Dependency Injection (DI)IoC ContainerBeanApplicationContext@Component@ComponentScan@AutowiredConstructor InjectionSetter InjectionField InjectionReflection APIBean Definition

Test your understanding

  1. 1स्प्रिंग IoC कंटेनर डिपेंडेंसी इंजेक्शन को कैसे संभालता है और यह डेवलपर के लिए क्या लाभ प्रदान करता है?
  2. 2कंस्ट्रक्टर इंजेक्शन, सेटर इंजेक्शन और फील्ड इंजेक्शन के बीच मुख्य अंतर क्या हैं, और कंस्ट्रक्टर इंजेक्शन को सबसे अधिक अनुशंसित क्यों माना जाता है?
  3. 3स्प्रिंग फ्रेमवर्क में `@Component` और `@ComponentScan` एनोटेशन का क्या उद्देश्य है?
  4. 4जावा रिफ्लेक्शन API स्प्रिंग के IoC कंटेनर को ऑब्जेक्ट्स को मैनेज करने में कैसे मदद करता है?
  5. 5एप्लिकेशन कॉन्टेक्स्ट के संदर्भ में 'बीन' (Bean) का क्या अर्थ है और यह एक सामान्य जावा ऑब्जेक्ट से कैसे भिन्न है?

Turn any lecture into study material

Paste a YouTube URL, PDF, or article. Get flashcards, quizzes, summaries, and AI chat — in seconds.

No credit card required