सरल समाधान @Resource
@Resource(name="bean1")
public void setBean(BeanType bean) {
}
संयोग
, @Qualifier
@Autowired
साथ प्रयोग के लिए आईडी के आधार पर सेम के लिये किया जाता है, उपयोग करने के लिए है जैसे
@Autowired @Qualifier("bean1")
public void setBean(BeanType bean) {
}
जहां bean1
की आईडी है इंजेक्शन होने के लिए बीन।
देखें Spring manual:
फ़ॉलबैक मैच के लिए, सेम नाम एक डिफ़ॉल्ट क्वालीफायर मूल्य माना जाता है। इस प्रकार आप नेस्टेड क्वालीफायर तत्व के बजाय बीन को एक आईडी "मुख्य" के साथ परिभाषित कर सकते हैं, जिससे एक ही मिलान परिणाम होता है। हालांकि, यद्यपि आप नाम से विशिष्ट बीन्स को संदर्भित करने के लिए इस सम्मेलन का उपयोग कर सकते हैं, @Autowired
मौलिक रूप से वैकल्पिक अर्थात् क्वालीफायर के साथ टाइप-संचालित इंजेक्शन के बारे में है। इसका मतलब यह है कि क्वालीफायर मूल्य, यहां तक कि बीन नाम फ़ॉलबैक के साथ, हमेशा प्रकार के मैचों के सेट के भीतर सेमेन्टिक्स को संकुचित करते हैं; वे अर्थात् एक अद्वितीय बीन आईडी का संदर्भ व्यक्त नहीं करते हैं।
और
आप नाम से एनोटेशन चालित इंजेक्शन व्यक्त करने के लिए करना चाहते हैं, मुख्य रूप से @Autowired
का उपयोग नहीं करते हैं, भले ही @Qualifier
मूल्यों के माध्यम से एक सेम नाम की चर्चा करते हुए की तकनीकी रूप से सक्षम है। इसके बजाय, जेएसआर-250 @Resource
एनोटेशन का उपयोग करें, जिसे अपने विशिष्ट नाम से एक विशिष्ट लक्ष्य घटक की पहचान करने के लिए अर्थात् परिभाषित किया गया है, घोषित प्रकार मिलान प्रक्रिया के लिए अप्रासंगिक है।
मैं @Resource
पसंद करता हूं, यह क्लीनर (और वसंत-विशिष्ट नहीं है)।
हम्म ... तो मैंने कुछ गलत किया होगा क्योंकि @Qualifier को कोई बीन्स नहीं मिला .. '@ संसाधन 'हालांकि काम करता है। क्या आप कृपया जांच सकते हैं कि '@ क्वालीफायर' वास्तव में आईडी के लिए काम करता है? दस्तावेज़ों के मुताबिक, इसे बीन में ' 'तत्व की आवश्यकता है। –
@Aaron: प्रत्येक दृष्टिकोण के व्यवहार वास्तव में अलग-अलग हैं। '@ Autowired' के साथ' @ क्वालीफायर' का उपयोग करते समय, क्वालीफायर का उपयोग '@ Autowired' द्वारा प्रस्तुत विकल्पों को कम करने के लिए किया जाता है, जबकि' संसाधन 'नाम से बीन का चयन करता है। – skaffman
@Aaron: संपादित करें – skaffman