spring - बीन प्रारंभ करने के बाद विधि को कैसे कॉल करें?




initialization startup (4)

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

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

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


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

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

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

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

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


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

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


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

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

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





applicationcontext