2011-08-16 3 views
8

मैं एनोटेशन आधारित तारों का उपयोग कर रहा (यानी @Configurable(autowire=Autowire.BY_TYPE)) किसी वर्ग के लिए है, और मैं एक सूची के रूप में दिए गए प्रकार के सभी सेम तार करना चाहते हैं:क्या वसंत में किसी दिए गए प्रकार की सभी निर्भरताओं को स्वचालित करने का कोई तरीका है?

आवेदन संदर्भ:

<beans> 
    <bean class="com.my.class.FirstConfigurer"/> 
    <bean class="com.my.class.SecondConfigurer"/> 
</beans> 

वर्ग autowire करने में:

@Configurable(autowire=Autowire.BY_TYPE) public class Target { 
    ... 
    public void setConfigurers(List<Configurer> configurers) { ... } 
} 

सभी निर्भरता कहा जाता Configurer

मैं एक आम इंटरफ़ेस को लागू इस काम को एक संग्रह में एक साथ तारित एक प्रकार की सभी निर्भरताओं के लिए एक तरीका है और जहां आवश्यक हो इंजेक्शन दिया गया है, या मुझे XML या कुछ में <list> परिभाषित करना चाहिए?

उत्तर

7

हाँ,

@Inject 
private List<Configurer> configurers; 

काम करता है, और आप इंटरफ़ेस को लागू सभी सेम की एक सूची प्राप्त। (एकाधिक बदलाव - @Inject या @Autowired, फ़ील्ड, सेटर या कन्स्ट्रक्टर इंजेक्शन - सभी काम)

+1

मैं कभी भी काम करने के लिए स्वत: काम करने में सक्षम नहीं हूं, लेकिन जानना अच्छा है! –

2

यह काम करना चाहिए:

@Configurable(autowire=Autowire.BY_TYPE) 
public class Target { 

    @Autowired 
    public void setConfigurers(List<Configurer> configurers) { ... } 

} 

यह section 3.9.2 of the Spring manual में वर्णित है:

यह भी एक क्षेत्र के लिए एनोटेशन जोड़कर ApplicationContext से एक विशेष प्रकार के सभी सेम प्रदान करने के लिए संभव है या विधि जो उस प्रकार की सरणी की अपेक्षा करती है [...] यह टाइप किए गए संग्रह के लिए लागू होता है।

+0

दुर्भाग्यवश, यह मेरे लिए काम नहीं कर रहा है। मैं स्प्रिंग 3.0.1 चला रहा हूं, मेरे पास मेरे लक्ष्य वर्ग पर कॉन्फ़िगर करने योग्य परिभाषित है, मेरे सेटर पर परिभाषित स्वत: निकाला गया है, लोड-टाइम-बुनाई ठीक से कॉन्फ़िगर किया गया है, मेरे एप्लिकेशन संदर्भ में कॉन्फ़िगरर उदाहरण लोड किए गए हैं, लेकिन इस संपत्ति के लिए कोई ऑटोवॉयरिंग नहीं होती है, हालांकि अन्य गुण ठीक से autowired हैं। अजीब। मैं देख सकता हूं कि वसंत मेरे ऐप-संदर्भ में कॉन्फ़िगरर बना रहा है, लेकिन जब ऑटोवॉयरिंग आता है, तो इसमें शामिल नहीं होता है। क्या मुझे काम करने के लिए एक से अधिक की आवश्यकता है? –

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