2013-02-15 28 views
7

का उपयोग करके सेम की एक सूची इंजेक्ट करें मुझे स्प्रिंग बीन मिला है, और वसंत बीन में मुझे अन्य बीन्स की सूची पर निर्भरता है। मेरा सवाल है: मैं उस बीन की निर्भरता के रूप में सेम की जेनेरिक सूची कैसे इंजेक्ट कर सकता हूं?वसंत @ कॉन्फ़िगरेशन एनोटेशन

उदाहरण के लिए, कुछ कोड:

public interface Color { } 

public class Red implements Color { } 

public class Blue implements Color { } 

मेरे सेम:

public class Painter { 
    private List<Color> colors; 

    @Resource 
    public void setColors(List<Color> colors) { 
     this.colors = colors; 
    } 
} 

@Configuration 
public class MyConfiguration { 

    @Bean 
    public Red red() { 
    return new Red(); 
    } 

    @Bean 
    public Blue blue() { 
    return new Blue(); 
    } 

    @Bean 
    public Painter painter() { 
    return new Painter(); 
    } 
} 

सवाल है, मैं पेंटर में रंगों की सूची कैसे प्राप्त करूं? साथ ही, एक तरफ ध्यान दें: क्या मुझे @ कॉन्फ़िगरेशन इंटरफेस प्रकार, या कक्षा वापस करनी चाहिए?

सहायता के लिए धन्यवाद!

+0

की संभावित डुप्लिकेट [एक सूची स्वत: तारों util स्कीमा का उपयोग कर NoSuchBeanDefinitionException देता है] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – gstackoverflow

उत्तर

12

सेटर पर @Resource या @Autowired रखने के लिए आपको क्या करना चाहिए, आपके List<Color> फ़ील्ड में रंग के सभी उदाहरण इंजेक्ट करना चाहिए।

आप और अधिक स्पष्ट होना चाहते हैं, तो आप एक और सेम के रूप में एक संग्रह लौट सकते हैं:

@Bean 
public List<Color> colorList(){ 
    List<Color> aList = new ArrayList<>(); 
    aList.add(blue()); 
    return aList; 
}  

और यह एक autowired क्षेत्र के रूप में इस तरह का उपयोग करें:

@Resource(name="colorList") 
public void setColors(List<Color> colors) { 
    this.colors = colors; 
} 

या

@Resource(name="colorList") 
private List<Color> colors; 

इंटरफ़ेस या कार्यान्वयन को वापस करने के बारे में आपके प्रश्न पर, किसी को भी काम करना चाहिए, लेकिन इंटरफ़ेस ऐस को प्राथमिकता दी जानी चाहिए।

+0

हाय बिजू, उत्तर के लिए धन्यवाद। मैंने यह भी सोचा कि यह काम करेगा, लेकिन एक सहयोगी ने कहा कि तैनाती करते समय, वसंत ने अपवाद फेंक दिया। मैं थोड़ा और जांच करूँगा। इस बीच, मैंने आपके द्वारा सुझाए गए एक समान दृष्टिकोण का उपयोग किया है। –

+0

बिल्कुल सही! मुझे इसकी ही खोज थी! – Flyingcows00

+0

क्या सूची को किसी अन्य '@ बीन' विधि में इंजेक्ट करने का कोई तरीका है? जाहिर है 'सूची' नाम से इंजेक्ट करने के लिए अजीब है। सिफारिशें '@ संसाधन 'का उपयोग करने के लिए हैं, लेकिन यह एक विधि param के रूप में काम नहीं करता है। – Stewart