मैं एक वसंत सेम कि इतने की तरह, अन्य सेम की एक सूची है बनाया है:स्प्रिंग एक्सएमएल भीतरी सेम सवाल
<bean name="InventoryManager" class="InvManager">
<property name="slots">
<bean class="HeadSlot" />
<bean class="ShoulderSlot" />
<!-- ... -->
</property>
</bean>
समस्या है, हालांकि, कि कहीं मैं करने के लिए एक और कक्षा में एक @Autowired
एनोटेशन का इस्तेमाल किया है है एक निश्चित इंटरफ़ेस को लागू सभी सेम है कि इन भीतरी सेम से कुछ को लागू है, इसलिए की तरह की एक सूची हड़पने:
@Autowired
public void registerInventoryHandlers(List<InvSlot> slots) {
//... do some setup stuff with beans that implement the InvSlot interface.
}
समस्या यहाँ है कि जाहिरा तौर पर "आंतरिक सेम" एक्सएमएल में परिभाषित @Autowired
सूची का हिस्सा नहीं हैं। हालांकि, इन सभी स्लॉट सेम नामों को देकर और फिर उन्हें एक्सएमएल से संदर्भित करना अनावश्यक और बदसूरत लगता है।
क्या कोई अन्य बीन के अंदर एक बीन को परिभाषित करने का कोई तरीका है, लेकिन "आंतरिक" बीन नहीं है? या इस डिजाइन को संभालने का एक बेहतर तरीका है?
आह, इसके विपरीत! @Autowired कुछ आश्चर्यजनक, कम ज्ञात उपयोग है। स्प्रिंग के दस्तावेज़ीकरण को उद्धृत करने के लिए: "किसी भी क्षेत्र या विधि में एनोटेशन जोड़कर एप्लिकेशनकॉन्टेक्स्ट से किसी विशेष प्रकार के सभी बीन्स प्रदान करना भी संभव है जो उस प्रकार की सरणी की अपेक्षा करता है" –
खूनी नरक, तो ऐसा होता है। मैं आपको धन्यवाद देता हूं, आपने मुझे एक नई बात सिखाई है :) – skaffman
मैंने इसे "खुद को पंजीकृत करने की आवश्यकता नहीं है" घटना कतार के रूप में इस्तेमाल करने की कोशिश की और खुद को खूनी चालाक माना। लेकिन फिर मैं कीड़े के इस विशेष कर में भाग गया। –