2012-08-06 18 views
43

स्प्रिंग्स नवीनतम संस्करण में उपयोग करके नाम से वसंत बीन को स्वचालित रूप से, हम @Autowired के रूप में एनोटेशन का उपयोग करके एक बीन को स्वचालित कर सकते हैं। यह बीन को अपने प्रकार (या कन्स्ट्रक्टर, अगर उस पर लागू होता है) का उपयोग कर स्वचालित रूप से करेगा। क्या कोई तरीका है कि मैं बीन नाम के आधार पर @Autowired एनोटेशन का उपयोग कर सकता हूं, जिसे हम autowire = "byName" के रूप में स्प्रिंग की XML फ़ाइल में एनोटेशन के बिना कर रहे थे?एनोटेशन

उत्तर

41

autowiring आप एक क्षेत्र या उम्मीदवार सेम के लिए एक क्वालीफायर के रूप में पैरामीटर पर इस्तेमाल किया जा सकता के अनुसार बाय-नाम बीन ऑटोवायरिंग के लिए जेएसआर-250 @Resource का उपयोग कर सकते हैं, जब तक कि आपको कन्स्ट्रक्टर इंजेक्शन या बहु-पैरामीटर विधि की आवश्यकता न हो jection।

डॉक्स से

:

आप नाम से एनोटेशन चालित इंजेक्शन व्यक्त करने के लिए करना चाहते हैं, मुख्य रूप से, @Autowired का उपयोग नहीं करते हैं, भले ही @Qualifier मूल्यों के माध्यम से एक सेम नाम की चर्चा करते हुए की तकनीकी रूप से सक्षम है। इसके बजाए, जेएसआर-250 @ रिसोर्स एनोटेशन का उपयोग करें, जिसे अपने विशिष्ट नाम से एक विशिष्ट लक्ष्य घटक की पहचान करने के लिए अर्थात् परिभाषित किया गया है, घोषित प्रकार मिलान प्रक्रिया के लिए अप्रासंगिक है।

86

आप उपयोग कर सकते हैं:

@Autowired 
@Qualifier("beanname") 

@Qualifier javadoc

यह एनोटेशन जब

+1

ग्रेट खोज। यह स्पष्ट नहीं था। – ATrubka

+1

'Autowire' के बजाय' @ Autowired' नहीं होना चाहिए? – user3114157

1

मैं बीन नाम प्रॉक्सी का उपयोग कर रहा था जो नाम से ऑटोवॉयरिंग को गड़बड़ कर रहा था। @Resource में यह समस्या नहीं थी क्योंकि इसे प्रकार की परवाह नहीं है। तो अब मुझे वसंत डेवलपर्स द्वारा इस सिफारिश के लिए एक कारण पता है :-) बस FYI

+0

फिर भी स्प्रिंग डॉक्स में एक अन्य कारण का उल्लेख किया गया है: ... बीन्स जिन्हें स्वयं संग्रह या मानचित्र प्रकार के रूप में परिभाषित किया जाता है उन्हें @Autowired के माध्यम से इंजेक्शन नहीं दिया जा सकता है, क्योंकि प्रकार मिलान उनके लिए उचित रूप से लागू नहीं होता है। – rwitzel

2

यदि आप बीन के नाम को परिभाषित करना चाहते हैं जिसके साथ वे डी कंटेनर में पंजीकृत होंगे, तो आप नाम एनोटेशन में ही पास कर सकते हैं उदा। @ सेवा ("कर्मचारी प्रबंधक")।

तो नीचे दिए गए कोड का उपयोग कर आप नाम से

@Autowired 
@Qualifier("employeeManager") 
private EmployeeManagerService employeeManagerService; 
1

उपयोग @Component ("beanname") अपने सेम के जावा वर्ग परिभाषा

तब में जबकि autowiring उपयोग JSR 330

autowire सक्षम कर सकते हैं

@ इंजेक्ट @ नामांकित (मूल्य = "beanname")