जब मैं का उपयोग getBean("test")
वसंत गेटबेन केस संवेदी है या नहीं?
मैं
@Component
public class TEST {
}
की तरह एक वर्ग इस सेम लोड किया जा सकता है?
जब मैं का उपयोग getBean("test")
वसंत गेटबेन केस संवेदी है या नहीं?
मैं
@Component
public class TEST {
}
की तरह एक वर्ग इस सेम लोड किया जा सकता है?
getBean()
केस संवेदी, हालांकि वसंत @Component
और @Bean
कक्षाओं के लिए कस्टम सेम नामकरण रणनीति का उपयोग करता है। 4.10.5 Naming autodetected components देखें:
जब एक घटक स्कैनिंग की प्रक्रिया के हिस्से के रूप में स्वतः डिटेक्ट है, इसकी सेम नाम
BeanNameGenerator
रणनीति द्वारा उत्पन्न होता है [...]। डिफ़ॉल्ट रूप से, किसी भी स्प्रिंग स्टीरियोटाइप एनोटेशन (@Component
,@Repository
,@Service
, और@Controller
) जिसमेंname
मान शामिल है, जिससे वह नाम इसी बीन परिभाषा को प्रदान करेगा।इस तरह के एक एनोटेशन कोई
name
मूल्य किसी अन्य का पता चला घटक (जैसे कस्टम फ़िल्टर द्वारा की खोज उन के रूप में) के लिए, डिफ़ॉल्ट सेम नाम जनरेटर uncapitalized गैर योग्य वर्ग के नाम रिटर्न शामिल है या तो।
और @Configuration
/@Bean
के लिए 4.12.4.5 Customizing bean naming देखें:
डिफ़ॉल्ट रूप से, विन्यास कक्षाएं जिसके परिणामस्वरूप सेम के नाम के रूप में एक
@Bean
विधि के नाम का उपयोग करें। हालांकि,name
विशेषता के साथ, इस कार्यक्षमता को ओवरराइड किया जा सकता है।
अपने प्रश्न पर वापस जाएं। अपनी कक्षा जावा नामकरण सम्मेलनों (ऊंट-केस नाम) वसंत सेम के लिए असामान्य नाम का उपयोग करता है का पालन नहीं कर रहा है, इसलिए इस काम करेगा:
getBean("TEST")
लेकिन यदि आप उम्मीद नामकरण (@Component class Test { }
) का उपयोग करें, आप लोअर केस का उपयोग करना चाहिए पहचानकर्ता:
getBean("test")
इसके अलावा अगर आपका नाम अधिक जटिल है, uncapitalized ऊंट-केस वाक्य रचना लागू होता है (उद्धृत करने के लिए जारी Spring documentation):
[...] उदाहरण के लिए, यदि निम्न दो घटकों का पता लगाया गया, नाम
myMovieLister
औरmovieFinderImpl
होगा:
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
धन्यवाद टॉमसज़। यह मेरी अपेक्षा से अधिक जटिल है। अगर मेरी कक्षा @ कॉम्पोनेंट क्लास टेस्टट्री जैसी कुछ है, तो क्या मैं इसे लोड करने के लिए GetBean ("testTree") का उपयोग कर सकता हूं? – user496949
@ user496949: बिल्कुल। असल में यह जटिल नहीं है। आप शायद 'टेस्टट्री' प्रकार के वर्ग वाले चर के लिए एक ही नाम का उपयोग करेंगे। इसके अलावा आपको आजकल स्थिर रूप से टाइप किए गए 'GetBean (TestTree.class) 'का उपयोग करना चाहिए –
@Component
एनोटेशन डिफ़ॉल्ट है, जो अगर नहीं स्पष्ट रूप से एक नाम दिया, सेम पर Introspector.decapitalize()
विधि का उपयोग करेगा द्वारा AnnotationBeanNameGenerator
का उपयोग करता है बीन के लिए नाम पाने के लिए कक्षा नाम। आम तौर पर "टेस्ट" जैसे नाम वाली कक्षा इसे बीन नाम "टेस्ट" देगी।लेकिन decapitalize
एक जिज्ञासा है:
यह सामान्य रूप से लोअर केस को अपर केस से पहले वर्ण परिवर्तित करने का मतलब है, लेकिन जब से अधिक एक चरित्र और दोनों पहले और दूसरे वर्ण है (असामान्य) विशेष मामले में ऊपरी मामले हैं, हम इसे अकेला छोड़ देते हैं।
तो आपके class TEST
बीन नाम TEST
मिलेगा।
क्या आपने इस तरह से बीन लोड करने की कोशिश की है? –