2011-01-10 12 views
24

मेरे पास एक ही प्रकार के साथ कई बीन्स हैं (BeanType)। मैं उन्हें एनोटेशन के साथ आईडी द्वारा इंजेक्ट कैसे करूं? कहें:मैं आईडी द्वारा स्प्रिंग निर्भरता कैसे इंजेक्ट कर सकता हूं?

@Autowired @ID("bean1") 
public void setBean(BeanType bean) { 
} 

लेकिन कोई टिप्पणी @ID नहीं है।

मुझे केवल @Qualifier मिला जो इसका मतलब होगा कि मुझे अपने सभी बीन्स आईडी और क्वालीफायर देना होगा। निश्चित रूप से, एक और आसान तरीका है?

उत्तर

60

सरल समाधान @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 पसंद करता हूं, यह क्लीनर (और वसंत-विशिष्ट नहीं है)।

+0

हम्म ... तो मैंने कुछ गलत किया होगा क्योंकि @Qualifier को कोई बीन्स नहीं मिला .. '@ संसाधन 'हालांकि काम करता है। क्या आप कृपया जांच सकते हैं कि '@ क्वालीफायर' वास्तव में आईडी के लिए काम करता है? दस्तावेज़ों के मुताबिक, इसे बीन में ' 'तत्व की आवश्यकता है। –

+2

@Aaron: प्रत्येक दृष्टिकोण के व्यवहार वास्तव में अलग-अलग हैं। '@ Autowired' के साथ' @ क्वालीफायर' का उपयोग करते समय, क्वालीफायर का उपयोग '@ Autowired' द्वारा प्रस्तुत विकल्पों को कम करने के लिए किया जाता है, जबकि' संसाधन 'नाम से बीन का चयन करता है। – skaffman

+0

@Aaron: संपादित करें – skaffman

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

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