2012-06-10 14 views

उत्तर

15

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 { 
    // ... 
} 
+0

धन्यवाद टॉमसज़। यह मेरी अपेक्षा से अधिक जटिल है। अगर मेरी कक्षा @ कॉम्पोनेंट क्लास टेस्टट्री जैसी कुछ है, तो क्या मैं इसे लोड करने के लिए GetBean ("testTree") का उपयोग कर सकता हूं? – user496949

+0

@ user496949: बिल्कुल। असल में यह जटिल नहीं है। आप शायद 'टेस्टट्री' प्रकार के वर्ग वाले चर के लिए एक ही नाम का उपयोग करेंगे। इसके अलावा आपको आजकल स्थिर रूप से टाइप किए गए 'GetBean (TestTree.class) 'का उपयोग करना चाहिए –

3

@Component एनोटेशन डिफ़ॉल्ट है, जो अगर नहीं स्पष्ट रूप से एक नाम दिया, सेम पर Introspector.decapitalize() विधि का उपयोग करेगा द्वारा AnnotationBeanNameGenerator का उपयोग करता है बीन के लिए नाम पाने के लिए कक्षा नाम। आम तौर पर "टेस्ट" जैसे नाम वाली कक्षा इसे बीन नाम "टेस्ट" देगी।लेकिन decapitalize एक जिज्ञासा है:

यह सामान्य रूप से लोअर केस को अपर केस से पहले वर्ण परिवर्तित करने का मतलब है, लेकिन जब से अधिक एक चरित्र और दोनों पहले और दूसरे वर्ण है (असामान्य) विशेष मामले में ऊपरी मामले हैं, हम इसे अकेला छोड़ देते हैं।

तो आपके class TEST बीन नाम TEST मिलेगा।

संबंधित मुद्दे