2012-06-12 11 views
11

स्प्रिंग आईओसी में एक बीन (समान नाम और कक्षा के साथ) के लिए दो परिभाषा है?उसी स्प्रिंग बीन को एक ही नाम से दो बार परिभाषित करना

मेरे पास web.xml में दो बीन परिभाषा फ़ाइलें शामिल हैं। नीचे नमूना देखें।

applicationContext-beans1.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

applicationContext-beans2.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

मैं अब तक किसी भी मुद्दे का सामना करना पड़ नहीं कर रहा हूँ। लेकिन, क्या यह संभवतः वास्तविक वातावरण में प्रभावित होगा जो बहु थ्रेड और क्लस्टर हो जाएगा?

नोट: दोनों XMLs लोड किए गए हैं के रूप में मैं दोनों XMLs में परिभाषित (केवल एक बार) अन्य सेम का उपयोग करने में सक्षम हूँ

+0

दोनों एक्सएमएल फाइल वास्तव में लोड हो चुकी हैं? –

+0

हां। दोनों लोड हो गए हैं। – hop

+0

[स्प्रिंग के ओवरराइडिंग बीन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5849192/springs-overriding-bean) –

उत्तर

27

यह वैध है, लेकिन आप पाएंगे कि एक सेम द्वारा ओवरराइड की गई है अन्य। आप इसे लॉग इन

Overriding bean definition for... 

यह व्यवहार आपको पहले आपूर्ति की गई बीन परिभाषाओं को ओवरराइड करने की अनुमति देता है। यह आपके ऐप की स्थैतिक असेंबली को प्रभावित करता है, और आपके प्रश्न में सुझाए गए थ्रेडिंग/क्लस्टरिंग से संबंधित नहीं है।

ध्यान दें कि DefaultListableBeanFactory आप के माध्यम से इस व्यवहार कॉन्फ़िगर कर सकते हैं setAllowBeanDefinitionOverriding()

+0

setAllowBeanDefinitionOverriding() को जल्दी से करने की आवश्यकता है। यदि आप प्रोग्रामिक रूप से बीन संदर्भ बनाते हैं, तो सुनिश्चित करें कि आप एक निर्माता को ताज़ा करने के लिए रीफ्रेश पैरामीटर सेट के साथ उपयोग करें और फिर "मैन्युअल" लोडिंग ट्रिगर करें। यह तब भी काम करेगा जब आपके वसंत सेम कई फाइलों/संदर्भों में फैले हुए हों। अन्यथा यदि आप DEBUG-logging को सक्षम करते हैं तो आपको केवल 'DEBUG osbfsDefaultListableBeanFactory जैसे लॉग प्रविष्टियां दिखाई देंगी - समकक्ष परिभाषा के साथ बीन' myBean 'के लिए बीन परिभाषा ओवरराइड करना: ... [spring/config1.xml]] को बदलकर ... ; में परिभाषित ... [वसंत/config2.xml]] ' –

6

यह वैध और उपयोगी है, खासकर जब आप किसी तृतीय पक्ष की फलियों के कार्यान्वयन (मेरा मतलब है, जहाँ आप को बदलने की अनुमति नहीं कर रहे हैं बदलने की कोशिश एक बीन के कार्यान्वयन) और जहां आपको बीन के लिए कुछ अतिरिक्त (मर्ज) गुण प्रदान करने/कॉन्फ़िगर करने की आवश्यकता है।

बीन का ओवरराइडिंग xmls के आदेश पर निर्भर करता है जो आपको web.xml या स्टैंड-अलोन के माध्यम से बनाने के लिए प्रदान करते हैं। नवीनतम बीन परिभाषा खेल जीत जाएगी।

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