दिलचस्प पोस्ट
मैं एंड्रॉइड में एक PreferenceActivity से SharedPreferences कैसे प्राप्त करूं? स्ट्रिंग (पायथन) में प्रत्येक शब्द के पहले अक्षर को कैपिटल कैसे करें? मेरी स्क्रिप्ट एसक्यूआरएल यूआरएल क्या है? ढेर आवंटन, पैडिंग और संरेखण "एनआर == एफएनआर" क्या है? Jquery सत्यापन प्लगइन का उपयोग करके सरणी इनपुट की पुष्टि करना प्रक्रिया बिल्डर का आउटपुट स्ट्रिंग में कैसे रीडायरेक्ट करें? हाइबरनेट में प्रथम और द्वितीय स्तर की कैशिंग क्या है? वर्तमान और मोडल व्यू नियंत्रक को खारिज करें एक WxPython पैनल के अंदर एक matplotlib आकृति को एम्बेड करना पोस्ट बिल्ड ईवेंट का उपयोग करके एक प्रोजेक्ट से दूसरी फ़ाइल कॉपी करें … VS2010 क्या कभी भी वादों का समाधान नहीं होता है जिससे स्मृति रिसाव होता है? क्या मैं आर में एक हैश के रूप में एक सूची का उपयोग कर सकता हूं? यदि हां, तो यह इतना धीमा क्यों है? क्या "कुछ 0 >>" मतलब है? क्यों लवणों को हमलों 'असंभव' बनाते हैं?

बीन इनिशियलाइजेशन पूरा होने के बाद किसी विधि को कैसे कॉल करें?

मेरे पास उपयोग के मामले हैं जहां मुझे बीन में एक (गैर-स्थिर) विधि कॉल करने की आवश्यकता होती है, केवल एक बार जब ApplicationContext लोड हो जाता है। क्या यह ठीक है, अगर मैं इसके लिए MethodInvokingFactoryBean का उपयोग करता हूँ? या हमारे पास कुछ बेहतर समाधान है?

एक साइड नोट के रूप में, मैं वेब अनुप्रयोग में अनुप्रयोग संदर्भ को लोड करने के लिए ConfigContextLoaderListener का उपयोग करता हूं। और चाहें, कि यदि बीन 'ए' तत्काल होता है तो केवल एक विधि 'ए' को कॉल करें।

यह कैसे अच्छी तरह से किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "बीन इनिशियलाइजेशन पूरा होने के बाद किसी विधि को कैसे कॉल करें?"

आप की तरह कुछ का उपयोग कर सकते हैं:

<beans> <bean id="myBean" class="..." init-method="init"/> </beans> 

यह "init" विधि को कॉल करेगा जब बीन को तत्काल किया जाएगा।

अन्य उत्तरों में @PostConstruct सुझाव पर विस्तार करने के लिए, यह वास्तव में सबसे अच्छा समाधान है, मेरी राय में

  • यह आपके कोड को स्प्रिंग एपीआई से डिकॉप्ल्ड रखता है (@PostConstruct javax में है। *)
  • यह स्पष्ट रूप से आपके init विधि को कुछ के रूप में टिप्पणी करता है जिसे बीन को इनिशियलाइज़ करने के लिए बुलाया जाना चाहिए
  • आपको अपने स्प्रिंग बीन की परिभाषा में init-method विशेषता को जोड़ने के लिए याद रखने की आवश्यकता नहीं है, स्प्रिंग स्वचालित रूप से विधि को बुलाता है (मानते हुए कि आप संदर्भ में किसी और स्थान पर, किसी भी प्रकार, किसी भी रूप में रजिस्टर कर सकते हैं)।

संदर्भ में वर्णित अनुसार, विचार करने के लिए तीन अलग-अलग दृष्टिकोण हैं

Init-method विशेषता का उपयोग करें

पेशेवरों:

  • अंतरफलक को लागू करने के लिए बीन की आवश्यकता नहीं है

विपक्ष:

  • कोई तत्काल संकेत इस विधि का निर्माण करने के बाद आवश्यक है ताकि यह सुनिश्चित किया जा सके कि बीन ठीक से कॉन्फ़िगर है।

बीन शुरू करना लागू करें

पेशेवरों:

  • इनिट-विधि को निर्दिष्ट करने की आवश्यकता नहीं है, या घटक स्कैनिंग / एनोटेशन प्रोसेसिंग चालू करें।
  • लाइब्रेरी के साथ प्रदान की जाने वाली बीन्स के लिए उपयुक्त, जहां हम इस लाइब्रेरी का इस्तेमाल करते हुए आवेदन नहीं करना चाहते हैं, जो कि बीन जीवनचक्र के साथ खुद का संबंध रखते हैं।

विपक्ष:

  • Init- विधि दृष्टिकोण से अधिक आक्रामक

JSR-250 @ PostConstruct लाइफकेली एनोटेशन का उपयोग करें

पेशेवरों:

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

विपक्ष:

  • आरंभिकता अब विन्यास में केंद्रीय रूप से निर्दिष्ट नहीं है।
  • आपको एनोटेशन प्रोसेसिंग चालू करना याद रखना चाहिए (जिसे कभी-कभी भुला दिया जा सकता है)

क्या आपने InitializingBean लागू करने की कोशिश की है? यह वास्तव में आप की तरह लगता है।

नकारात्मक पक्ष यह है कि आपकी बीन स्प्रिंग-जागरूक हो जाती है, लेकिन ज्यादातर अनुप्रयोगों में ऐसा नहीं है जो इतना बुरा नहीं है।

आप इसे करने के लिए अपने एप्लिकेशन संदर्भ में कस्टम BeanPostProcessor परिनियोजित कर सकते हैं। या यदि आप अपने सेम में एक वसंत अंतरफलक को लागू करने में कोई दिक्कत नहीं करते हैं, तो आप आरंभिक बीन इंटरफ़ेस या "init-method" निर्देश (समान लिंक) का उपयोग कर सकते हैं।

दो दृष्टिकोणों के बारे में किसी भी भ्रम को स्पष्ट करने के लिए

  1. @PostConstruct और
  2. init-method="init"

व्यक्तिगत अनुभव से, मुझे एहसास हुआ कि (1) केवल सर्विसलेट कंटेनर में काम करता है, जबकि (2) किसी भी वातावरण में काम करता है, यहां तक ​​कि डेस्कटॉप अनुप्रयोगों में भी। इसलिए, यदि आप एक स्वसंपूर्ण आवेदन में स्प्रिंग का प्रयोग करेंगे, तो आपको इसका इस्तेमाल करने के लिए (2) का उपयोग करना होगा "आरंभ करने के बाद इस पद्धति को कॉल करें"