मैं स्प्रिंगबूट और स्प्रिंग-वेब के साथ जावा कॉन्फ़िगरेशन के साथ स्प्रिंग 4 का उपयोग कर रहा हूं।जावा कॉन्फ़िगरेशन द्वारा CommonAnnotationBeanPostProcessor के माध्यम से @PostConstruct को सक्रिय करने का उचित तरीका क्या है?
मेरी @PostConstruct
एनोटेट लांच पर स्प्रिंग द्वारा निष्पादित तरीकों के लिए, यह संदर्भ के साथ CommonAnnotationBeanPostProcessor
रजिस्टर करने के लिए आवश्यक है, अन्यथा @PostConstruct
नजरअंदाज कर दिया है।
एक XML- आधारित स्प्रिंग विन्यास में, डॉक्स (सेम तत्व से कम) का उपयोग करने के
<context:annotation-config/>
मैं भी एक उदाहरण है जहां पंजीकरण, एक व्यक्ति की फलियों के आधार पर किया जाता है ताकि तरह देखा है कहते हैं:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
मैं यदि संभव हो तो इससे बचना चाहते हैं। मेरे प्रोजेक्ट में कोई भी XML फ़ाइल शामिल नहीं है, और मेरे निर्माण फ़ोल्डर में मेरे लिए कोई भी जेनरेट नहीं किया गया है।
वर्तमान में, मेरी समाधान @ComponentScan
साथ मेरी कक्षा टिप्पणी करने के लिए, मैं कारणों का मानना है कि जो पता लगाने और रजिस्टर @Component
और @Bean
रों को वसंत है। किसी भी तरह, यह CommonAnnotationBeanPostProcessor
का आह्वान करने का कारण बनता है, हालांकि मुझे नहीं पता कि क्यों, लेकिन यह मेरी समस्या हल करता है!
(इस वर्ग के एक @Autowired
संपत्ति है, जो स्टार्टअप पर अशक्त है - इसलिए @PostConstruct
के माध्यम से प्रारंभ करने की ज़रूरत)
लेकिन फिर, मेरे सवाल, क्या उचित तरीका यह जावा का उपयोग कर प्राप्त करने के लिए है विन्यास? धन्यवाद!
आपको इस संदर्भ को बताना होगा कि आप एनोटेशन का उपयोग करना चाहते हैं, या तो मैन्युअल रूप से सभी 'बीनपोस्टप्रोसेसर' (अनुशंसित नहीं) पंजीकरण करके या ' ' का उपयोग करके (जो पहले से ही ' <संदर्भ: घटक-स्कैन /> 'या 'एप्लिकेशन कॉन्टेक्स्ट' कार्यान्वयन का उपयोग करके डिफ़ॉल्ट रूप से 'एनोटेशन कॉन्फिग एप्प्लिकेशन कॉन्टेक्स्ट' जैसी टिप्पणियां का उपयोग करता है। ऐसा करने का कोई भी उचित तरीका नहीं है, उल्लिखित तरीके मान्य हैं। –
तथ्य यह है कि आप एक '@ ऑटोवायर' संपत्ति है जो शून्य नहीं है, वसंत को ऑटोवायर करना चाहिए। आम तौर पर इसका तात्पर्य है कि आपने उस संदर्भ को नहीं बताया है जिसे आप एनोटेशन का उपयोग करना चाहते हैं। –
@ एम। दीनम धन्यवाद। स्पष्टीकरण के लिए, '@ Autowired' प्रॉपर्टी इंजेक्शन दी गई है लेकिन स्थिर/इंस्टेंस कन्स्ट्रक्टर चल रहे समय पर मान अभी तक उपलब्ध नहीं है, इसलिए @PostConstruct का उपयोग संदर्भ *** कुछ *** एनोटेशन के बारे में पता है, (शायद '@ स्प्रिंगबूट एप्लिकेशन', '@ कॉन्फ़िगरेशन' और '@ घटक' के माध्यम से जो मैं उपयोग करता हूं), लेकिन दस्तावेज़ बताते हैं कि @PostConstruct उनमें से एक नहीं है और इसलिए 'CommonAnotationBeanPostProcessor' को सूचीबद्ध करने का कोई तरीका आवश्यक है। मैं जावा कॉन्फ़िगरेशन के साथ संगत होने के लिए इस तरह से चाहता हूं, (एक्सएमएल के बिना)। – zkn