जब @ वर्ग के साथ वर्ग की व्याख्या करते हैं, तो क्या इसका मतलब यह है कि यह स्प्रिंग बीन और सिंगलटन है?


111

वसंत के लिए काफी नया होने के नाते मेरे पास एक वर्ग को एनोटेट करने का सवाल है। जब किसी वर्ग को एनोटेट @Componentकरते हैं तो इसका अर्थ है कि यह वर्ग स्प्रिंग बीन होगा और डिफ़ॉल्ट रूप से एक सिंगलटन होगा?

जवाबों:


129

हां, यह सही है, @Componentएक स्प्रिंग बीन और एक सिंगलटन है।

यदि वर्ग सेवा स्तर से संबंधित है, तो आप @Serviceइसके बजाय एनोटेट करना चाह सकते हैं

लेकिन ध्यान रखें कि इन एनोटेशन का पता लगाने के लिए, आपको यह लाइन लगाने की आवश्यकता है applicationContext.xml:

<context:component-scan base-package="com.yourcompany" />

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


1
@Component और या @Service annotations आदि का उपयोग करते समय .. इसका मतलब है कि मैं सिंगलेट्स बना रहा हूं, क्या मैं समसामयिक मुद्दों पर नहीं चलूंगा? मेरे नौसिखिया विचार के लिए यह एक सेम में परिणाम होगा जो कि पूरे ApplicationContext में उपयोग किया जाता है, इसलिए समवर्ती उपयोगकर्ताओं को एकल बीन का संदर्भ मिलेगा। या क्या मैं कुछ न कुछ भूल रहा हूं?
मार्को

3
@ मार्को यदि आपके पास कोई राज्य नहीं है (उदाहरण के लिए, स्प्रिंग सेम से भिन्न चर), तो कोई संगामिति समस्याएँ नहीं होंगी।
बोझो

आपको हर बार बीन के नए उदाहरण की आवश्यकता होती है या हर बार आपको बीन के नए उदाहरण की आवश्यकता होती है?
हर्षाना

@Bozho आपका क्या मतलब है: "और आपको हर बार बीन के नए उदाहरण की आवश्यकता नहीं होगी"? क्या इसका मतलब यह है कि स्प्रिंग को एक नया उदाहरण नहीं बनाना होगा या एक डेवलपर के रूप में आपको एक नया उदाहरण बनाने की आवश्यकता नहीं होगी?
user1766169

24

डिफ़ॉल्ट रूप से - हाँ।

हालाँकि, आप @Scopeएनोटेशन का उपयोग करके इस व्यवहार को ओवरराइड कर सकते हैं । उदाहरण के लिए:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.