स्प्रिंग्स नवीनतम संस्करण में उपयोग करके नाम से वसंत बीन को स्वचालित रूप से, हम @Autowired
के रूप में एनोटेशन का उपयोग करके एक बीन को स्वचालित कर सकते हैं। यह बीन को अपने प्रकार (या कन्स्ट्रक्टर, अगर उस पर लागू होता है) का उपयोग कर स्वचालित रूप से करेगा। क्या कोई तरीका है कि मैं बीन नाम के आधार पर @Autowired
एनोटेशन का उपयोग कर सकता हूं, जिसे हम autowire = "byName" के रूप में स्प्रिंग की XML फ़ाइल में एनोटेशन के बिना कर रहे थे?एनोटेशन
एनोटेशन
उत्तर
autowiring आप एक क्षेत्र या उम्मीदवार सेम के लिए एक क्वालीफायर के रूप में पैरामीटर पर इस्तेमाल किया जा सकता के अनुसार बाय-नाम बीन ऑटोवायरिंग के लिए जेएसआर-250 @Resource
का उपयोग कर सकते हैं, जब तक कि आपको कन्स्ट्रक्टर इंजेक्शन या बहु-पैरामीटर विधि की आवश्यकता न हो jection।
:
आप नाम से एनोटेशन चालित इंजेक्शन व्यक्त करने के लिए करना चाहते हैं, मुख्य रूप से, @Autowired का उपयोग नहीं करते हैं, भले ही @Qualifier मूल्यों के माध्यम से एक सेम नाम की चर्चा करते हुए की तकनीकी रूप से सक्षम है। इसके बजाए, जेएसआर-250 @ रिसोर्स एनोटेशन का उपयोग करें, जिसे अपने विशिष्ट नाम से एक विशिष्ट लक्ष्य घटक की पहचान करने के लिए अर्थात् परिभाषित किया गया है, घोषित प्रकार मिलान प्रक्रिया के लिए अप्रासंगिक है।
मैं बीन नाम प्रॉक्सी का उपयोग कर रहा था जो नाम से ऑटोवॉयरिंग को गड़बड़ कर रहा था। @Resource में यह समस्या नहीं थी क्योंकि इसे प्रकार की परवाह नहीं है। तो अब मुझे वसंत डेवलपर्स द्वारा इस सिफारिश के लिए एक कारण पता है :-) बस FYI
फिर भी स्प्रिंग डॉक्स में एक अन्य कारण का उल्लेख किया गया है: ... बीन्स जिन्हें स्वयं संग्रह या मानचित्र प्रकार के रूप में परिभाषित किया जाता है उन्हें @Autowired के माध्यम से इंजेक्शन नहीं दिया जा सकता है, क्योंकि प्रकार मिलान उनके लिए उचित रूप से लागू नहीं होता है। – rwitzel
यदि आप बीन के नाम को परिभाषित करना चाहते हैं जिसके साथ वे डी कंटेनर में पंजीकृत होंगे, तो आप नाम एनोटेशन में ही पास कर सकते हैं उदा। @ सेवा ("कर्मचारी प्रबंधक")।
तो नीचे दिए गए कोड का उपयोग कर आप नाम से
@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;
उपयोग @Component ("beanname") अपने सेम के जावा वर्ग परिभाषा
तब में जबकि autowiring उपयोग JSR 330
autowire सक्षम कर सकते हैं@ इंजेक्ट @ नामांकित (मूल्य = "beanname")
ग्रेट खोज। यह स्पष्ट नहीं था। – ATrubka
'Autowire' के बजाय' @ Autowired' नहीं होना चाहिए? – user3114157