
1:27:43
Bean Lifecycle Explained | @PostConstruct, @PreDestroy, Scopes & @Lazy | Spring Boot Full Course #7
Coder Army
Overview
यह वीडियो स्प्रिंग बूट में बीन्स की लाइफ साइकिल को विस्तार से समझाता है। इसमें बताया गया है कि कैसे स्प्रिंग आईओसी कंटेनर बीन्स को बनाता है, मैनेज करता है और डिस्ट्रॉय करता है। वीडियो में @PostConstruct और @PreDestroy जैसे एनोटेशन, बीन्स के स्कोप (सिंगलटन, प्रोटोटाइप) और लेज़ी इनिशियलाइजेशन के कॉन्सेप्ट्स को भी कवर किया गया है। यह इंटरव्यू की तैयारी और स्प्रिंग फ्रेमवर्क की गहरी समझ के लिए महत्वपूर्ण है।
How was this?
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- स्प्रिंग फ्रेमवर्क में बीन्स की लाइफ साइकिल एक महत्वपूर्ण टॉपिक है, खासकर इंटरव्यू के लिए।
- आईओसी (IoC) कंटेनर बीन्स को मैनेज करने और उनकी डिपेंडेंसी इंजेक्ट करने के लिए जिम्मेदार होता है।
- लाइफ साइकिल में बीन के क्रिएशन से लेकर उसके डिस्ट्रॉय होने तक के सभी फेसेस शामिल होते हैं।
- सिंगलटन बीन्स डिफ़ॉल्ट रूप से ईगर (eager) इनिशियलाइजेशन के साथ आते हैं।
यह समझना महत्वपूर्ण है कि स्प्रिंग फ्रेमवर्क बैकग्राउंड में कैसे काम करता है, जिससे आप अधिक एफिशिएंट कोड लिख सकते हैं और इंटरव्यू में अच्छा प्रदर्शन कर सकते हैं।
जैसे जावा में ऑब्जेक्ट्स को गार्बेज कलेक्शन मैनेज करता है, वैसे ही स्प्रिंग आईओसी कंटेनर बीन्स के क्रिएशन, मैनेजमेंट और डिस्ट्रक्शन को मैनेज करता है।
- लाइफ साइकिल को समझाने के लिए एक नया स्प्रिंग बूट प्रोजेक्ट 'Bean Lifecycle Demo' बनाया गया।
- प्रोजेक्ट में स्प्रिंग कॉन्टेक्स्ट डिपेंडेंसी को पॉम.एक्सएमएल (pom.xml) में जोड़ा गया।
- एप्लीकेशन कॉन्टेक्स्ट (IoC कंटेनर) बनाने के लिए 'AnnotationConfigApplicationContext' का उपयोग किया गया।
- कॉन्फ़िगरेशन क्लास ('AppConfig') को '@Configuration' और '@ComponentScan' एनोटेशन के साथ डिफाइन किया गया।
सही प्रोजेक्ट सेटअप और आवश्यक डिपेंडेंसी को शामिल करना स्प्रिंग फ्रेमवर्क के साथ काम करने का पहला कदम है।
पॉम.एक्सएमएल (pom.xml) में स्प्रिंग कॉन्टेक्स्ट डिपेंडेंसी को जोड़ना।
- ऑर्डर सर्विस (OrderService) और पेमेंट सर्विस (PaymentService) नाम के दो बीन्स बनाए गए।
- ऑर्डर सर्विस पेमेंट सर्विस पर डिपेंडेंट है, जिसे कंस्ट्रक्टर इंजेक्शन के माध्यम से इंजेक्ट किया गया।
- '@Component' एनोटेशन का उपयोग करके बीन्स को स्प्रिंग द्वारा मैनेज करने योग्य बनाया गया।
- एप्लीकेशन कॉन्टेक्स्ट से 'getBean' मेथड का उपयोग करके बीन्स को प्राप्त किया गया और उनके मेथड्स को कॉल किया गया।
यह दिखाता है कि कैसे स्प्रिंग बीन्स को बनाता है और उनके बीच की निर्भरताओं को स्वचालित रूप से प्रबंधित करता है।
ऑर्डर सर्विस के कंस्ट्रक्टर में पेमेंट सर्विस का ऑब्जेक्ट इंजेक्ट करना।
- पहला स्टेप: आईओसी कंटेनर का स्टार्ट होना।
- दूसरा स्टेप: कॉन्फ़िगरेशन को रीड करना (जैसे ऐप कॉन्फिग क्लास)।
- तीसरा स्टेप: बीन डेफिनिशन को रीड करना (जैसे बीन का नाम, क्लास, स्कोप)।
- चौथा स्टेप: ऑब्जेक्ट्स को इंस्टेंशिएट (create) करना।
- पांचवां स्टेप: डिपेंडेंसीज को इंजेक्ट करना (जैसे कंस्ट्रक्टर या सेटर इंजेक्शन)।
इन फेसेस को समझने से आपको यह पता चलता है कि स्प्रिंग फ्रेमवर्क किसी बीन को शुरू से अंत तक कैसे प्रोसेस करता है।
ऑर्डर सर्विस और पेमेंट सर्विस जैसे बीन्स के लिए बीन डेफिनिशन बनाना।
- अवेयर इंटरफेस (जैसे BeanNameAware, ApplicationContextAware) बीन्स को कंटेनर के बारे में जानकारी प्राप्त करने की अनुमति देते हैं।
- स्प्रिंग इन इंटरफेसेस के मेथड्स को स्वचालित रूप से कॉल करता है (कॉलबैक)।
- BeanNameAware बीन का नाम प्राप्त करने में मदद करता है।
- ApplicationContextAware बीन को उसके कंटेनर के बारे में जानकारी देता है।
- इनका उपयोग मुख्य रूप से लॉगिंग या डीबगिंग जैसे विशेष मामलों में होता है।
यह जानने से कि बीन्स कंटेनर के बारे में जानकारी कैसे प्राप्त कर सकते हैं, आपको अधिक डायनामिक और कॉन्फ़िगरेबल एप्लिकेशन बनाने में मदद मिलती है।
यूजर सर्विस क्लास में BeanNameAware इंटरफ़ेस को लागू करना और उसके 'setBeanName' मेथड को ओवरराइड करना।
- डिपेंडेंसी इंजेक्ट होने के बाद और बीन के उपयोग के लिए तैयार होने से पहले इनिशियलाइजेशन स्टेप्स किए जाते हैं।
- इनिशियलाइजेशन के लिए '@PostConstruct' एनोटेशन का उपयोग किया जाता है, जो एक मेथड को बीन के पूरी तरह से तैयार होने से पहले कॉल करता है।
- यह मेथड कैश को इनिशियलाइज़ करने, एक्सपेंसिव रिसोर्सेज लोड करने या मैप्स को फ्लश करने जैसे कामों के लिए उपयोगी है।
- यह अवेयर इंटरफेसेस की तुलना में अधिक सामान्यतः उपयोग किया जाता है।
यह सुनिश्चित करता है कि आपका बीन उपयोग के लिए पूरी तरह से तैयार है, जिसमें कोई भी आवश्यक प्रारंभिक सेटअप या डेटा लोडिंग शामिल है।
कार्ड सर्विस क्लास में '@PostConstruct' एनोटेशन वाले मेथड का उपयोग करके हैश मैप में वैल्यूज डालना।
- जब आईओसी कंटेनर बंद होता है, तो बीन्स को डिस्ट्रॉय करने की प्रक्रिया शुरू होती है।
- '@PreDestroy' एनोटेशन वाले मेथड को बीन के डिस्ट्रॉय होने से ठीक पहले कॉल किया जाता है।
- यह मेथड रिसोर्सेज को क्लीन-अप करने, कनेक्शन बंद करने या किसी भी आवश्यक शटडाउन लॉजिक को परफॉर्म करने के लिए उपयोग किया जाता है।
- यह सुनिश्चित करता है कि एप्लिकेशन बंद होने पर कोई रिसोर्स लीक न हो।
यह सुनिश्चित करता है कि एप्लिकेशन बंद होने पर सभी रिसोर्सेज ठीक से क्लीन-अप हो जाएं, जिससे मेमोरी लीक या अन्य समस्याएं न हों।
एक मेथड को '@PreDestroy' के साथ एनोटेट करना जो रिसोर्सेज को क्लीन-अप करने के लिए एक संदेश प्रिंट करता है।
Key takeaways
- स्प्रिंग आईओसी कंटेनर बीन्स के पूरे जीवनचक्र को मैनेज करता है, जिसमें क्रिएशन, डिपेंडेंसी इंजेक्शन और डिस्ट्रक्शन शामिल हैं।
- बीन लाइफ साइकिल में कॉन्फ़िगरेशन पढ़ना, बीन डेफिनिशन बनाना, ऑब्जेक्ट इंस्टेंशिएट करना, डिपेंडेंसी इंजेक्ट करना और इनिशियलाइजेशन/डिस्ट्रक्शन कॉलबैक शामिल हैं।
- '@PostConstruct' और '@PreDestroy' एनोटेशन बीन्स के इनिशियलाइजेशन और डिस्ट्रक्शन के दौरान कस्टम लॉजिक चलाने के लिए शक्तिशाली तरीके प्रदान करते हैं।
- अवेयर इंटरफेस बीन्स को कंटेनर के बारे में जानकारी प्राप्त करने की अनुमति देते हैं, लेकिन इनका उपयोग विशेष मामलों के लिए होता है।
- सिंगलटन बीन्स डिफ़ॉल्ट रूप से ईगर इनिशियलाइज होते हैं, जबकि प्रोटोटाइप बीन्स लेज़ी इनिशियलाइज होते हैं।
Key terms
IoC ContainerBean LifecycleDependency Injection@Component@Configuration@ComponentScanSingleton ScopePrototype ScopeEager InitializationLazy Initialization@PostConstruct@PreDestroyAware InterfacesBeanNameAwareApplicationContextAwareInitialization
Test your understanding
- स्प्रिंग आईओसी कंटेनर बीन लाइफ साइकिल के किन मुख्य फेसेस को मैनेज करता है?
- बीन लाइफ साइकिल के दौरान '@PostConstruct' एनोटेशन का क्या महत्व है और इसका उपयोग कब किया जाता है?
- अवेयर इंटरफेस बीन्स को कौन सी जानकारी प्रदान करते हैं और उनके उपयोग के कुछ उदाहरण क्या हैं?
- सिंगलटन और प्रोटोटाइप स्कोप वाले बीन्स के इनिशियलाइजेशन में क्या अंतर है?
- बीन के डिस्ट्रक्शन के समय '@PreDestroy' एनोटेशन का क्या उद्देश्य है?