दिलचस्प पोस्ट
डेल्फी ऑब्जेक्ट कॉल करने के बाद भी क्यों हैं? निःशुल्क? एंड्रॉइड – फोटो लेना और उन्हें कस्टम नाम के साथ एक कस्टम गंतव्य के माध्यम से आशय के माध्यम से सहेजना एसएएचए 1 और आरएसए के साथ java.security.Signature बनाम MessageDigest और साइफर का उपयोग करना "घातक त्रुटि: <function> redeclare नहीं कर सकता" मेरे CALayer के एंकरपॉइंट को बदलना दृश्य को स्थानांतरित करता है क्या माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2010 का समर्थन सीएएम? एक HSQLDB डेटाबेस में सभी तालिकाओं को कैसे देखें? मैं इंटजर्स को पूर्णांक के रूप में कैसे पढ़ सकता / सकती हूं? क्या बड़ी प्राथमिकता है: ब्राउज़र में अस्पष्टता या z- इंडेक्स? क्यों और कैसे सी # कक्षा के बाहर निजी चर का उपयोग करने की अनुमति देता है जब यह एक ही युक्त वर्ग के भीतर है? जावा एफएक्स और ओपनजेडीके स्ट्रिंग में सफेद रिक्त स्थान को निकालने का सबसे तेज़ तरीका इनपुट फ़ील्ड से विशेषता को पढ़ते समय HTML- एन्कोडिंग खो गया आप asp.net mvc 3 और c # का उपयोग कर कुकीज़ को कैसे साफ़ करते हैं? एक प्रश्न चिह्न के साथ एक सीक्रेट सी # सिंटैक्स

वसंत: @ कंपाइंटेंट बनाम @ बीन

मैं समझता हूं कि @Component एनोटेशन को स्प्रिंग 2.5 में शुरू किया गया था ताकि @Component स्कैनिंग का उपयोग करके एक्सएमएल बीन की परिभाषा से छुटकारा पा सके।

@Bean वसंत 3.0 में पेश किया गया था और इसे @Configuration साथ इस्तेमाल किया जा सकता है ताकि पूरी तरह से एक्सएमएल फ़ाइल से छुटकारा पा सके और इसके बजाय जावा कॉन्फिग का इस्तेमाल किया जा सके।

@Component एनोटेशन की शुरुआत के बजाय @Component एनोटेशन का पुन: उपयोग करना संभव है? मेरी समझ यह है कि अंतिम लक्ष्य दोनों मामलों में सेम बनाने के लिए है

Solutions Collecting From Web of "वसंत: @ कंपाइंटेंट बनाम @ बीन"

@Component और @Bean दो अलग अलग चीजें करते हैं, और भ्रमित नहीं होना चाहिए।

@Component (और @Service और @Repository ) का उपयोग ऑटो-कॉन्फ़िगर बीन्स को क्लासपाथ स्कैनिंग का उपयोग करने के लिए किया जाता है। एनोटेटेड वर्ग और बीन के बीच एक एक-एक-एक मैपिंग है (यानी प्रति वर्ग एक बीन) तारों का नियंत्रण इस दृष्टिकोण से काफी सीमित है, क्योंकि यह विशुद्ध रूप से घोषणात्मक है।

@Bean का उपयोग स्पष्ट रूप से एक बीन घोषित करने के लिए किया जाता है, स्प्रिंग को इसके बाद के संस्करण के रूप में अपने आप करते हैं। यह वर्ग की परिभाषा से बीन की घोषणा को कम करता है, और आप बनाने से और बीन्स को ठीक से कॉन्फ़िगर करने की सुविधा देता है।

तुम्हारे प्रश्न का उत्तर देने के लिए…

@Component एनोटेशन की शुरुआत के बजाय @Component एनोटेशन का पुन: उपयोग करना संभव होता है?

ज़रूर, शायद; लेकिन उन्होंने नहीं चुना, क्योंकि दोनों काफी अलग हैं। स्प्रिंग पहले से ही पानी में गड़बड़ी के बिना काफी भ्रमित है

मान लीजिए मैं कुछ गतिशील राज्य के आधार पर विशिष्ट कार्यान्वयन चाहता हूं। @Bean उस मामले के लिए एकदम सही है

 @Bean @Scope("prototype") public SomeService someService() { switch (state) { case 1: return new Impl1(); case 2: return new Impl2(); case 3: return new Impl3(); default: return new Impl(); } } 

हालांकि, @Component साथ ऐसा करने का कोई रास्ता नहीं है।

घटक स्कैनिंग और स्वचालित तारों के लिए @Component पसंदीदा

बीन का उपयोग कब करना चाहिए?

कभी-कभी स्वचालित विन्यास एक विकल्प नहीं है कब? मान लीजिए कि आप तृतीय-पक्ष पुस्तकालयों के घटकों को तार करना चाहते हैं (आपके पास सोर्स कोड नहीं है ताकि आप इसके वर्गों को @ कम्पेनेंट के साथ एनोटेट न कर सकें), इसलिए स्वचालित कॉन्फ़िगरेशन संभव नहीं है।

@ बीन एनोटेशन एक ऑब्जेक्ट देता है जो वसंत को बीन के रूप में आवेदन संदर्भ में रजिस्टर करना चाहिए। विधि का शरीर उदाहरण बनाने के लिए जिम्मेदार तर्क देता है।

दोनों दृष्टिकोण का लक्ष्य स्प्रिंग कंटेनर में लक्ष्य प्रकार को दर्ज करना है

अंतर यही है कि @Bean विधि के लिए लागू है, जबकि @Component प्रकारों पर लागू होता है।

इसलिए जब आप @Bean एनोटेशन का उपयोग करते हैं तो आप विधि के शरीर में उदाहरण निर्माण तर्क को नियंत्रित करते हैं ( ऊपर दिए गए उदाहरण देखें)। @Component एनोटेशन के साथ आप नहीं कर सकते