2010-01-28 10 views
6

मैं एक ServiceListFactoryBean जो सेवा कार्यान्वयन की एक सूची बनाता है:कैसे autowire को factorybean

final List services = ctx.getBean("services", List.class)); 

मैं भी पारंपरिक का उपयोग कर सकते हैं:

<bean id="services" 
     class="org.springframework.beans...ServiceListFactoryBean" 
     p:serviceType="ServiceInterface"/> 

मैं एक समस्या के बिना applicationContext का उपयोग कर सेवाओं तक पहुंच सकेंगे कन्स्ट्रक्टर-Arg इंजेक्शन सफलतापूर्वक:

<bean id="aClass" class="AClass"> 
    <constructor-arg ref="services"/> 
</bean> 

लेकिन यदि मैं निर्भर करता हूं कि मैं निर्भर करता हूं ency

@Autowired @Qualifier("services") private List services; 

तो मैं द्वारा

FatalBeanException: No element type declared for collection [java.util.List] 

मैं वसंत 3.0 उपयोग कर रहा हूँ एक BeanCreationException वजह से मिलता है।

उत्तर

10

यह पता है कि इसका जवाब है बदल जाता है ...

@Resource(name="services") private List services; 
+1

यह वास्तव में काम करेगा, क्योंकि अब यह प्रकार के बजाय नाम से स्वचालित हो रहा है। वह पहले मामला था। हो सकता है कि आप इस बार समस्या को खारिज कर दें। लेकिन आपको समझना चाहिए क्यों। तो, कृपया दिए गए उत्तर पर विचार करें। चीयर्स। –

+0

सिरका - पूरे प्रोजेक्ट में अभी तक केवल दो बीन्स हैं (अब तक) और @Qualifiers का उपयोग करने के बावजूद, या स्पष्ट रूप से डिफ़ॉल्ट या ऑटोवायर को टाइप या द्वारा नामित करने के लिए, @Autowiring इस ServiceListFactoryBean के लिए काम नहीं करता है। –

4

अपवाद संदेश DefaultListableBeanFactory से है, और यह complining है कि यह अपने क्षेत्र autowire नहीं कर सकते क्योंकि List कोई सामान्य प्रकार है (देखें DefaultListableBeanFactory लाइन 716)।

अपने क्षेत्र में एक सामान्य हस्ताक्षर जोड़ने का प्रयास करें, e.h.

@Autowired @Qualifier("services") private List<Service> services; 
+0

हां, आपने इसे नीचे दबाया। +1 –

+2

नहीं, यह काम नहीं करता मुझे डर है। स्पष्ट रूप से टाइप करके ऑटोवायर सेट करें और प्राप्त करें: निर्भरता के लिए पाए गए प्रकार [सर्विसइंटरफेस] का कोई मिलान करने वाला बीन [ServiceInterface का संग्रह] –

0

क्या मैं वास्तव में आज पता चला, जब आप विशिष्ट इंटरफेस के उदाहरण के लिए सेम नामों में से नक्शा की जरूरत है, वहाँ और @Qualifier की की कोई जरूरत नहीं FactoryBean कोड किसी भी प्रकार का है। वसंत आपके लिए उम्मीदवारों को ढूंढ और इंजेक्ट करेगा। @Resource ने यह काम नहीं किया है, बस मामले में।

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