2010-11-22 11 views
21

हमारे ऐप में बहु-किरायेदारी का समर्थन करने की आवश्यकता है। बोर्ड के प्रत्येक ग्राहक कोर प्लेटफ़ॉर्म स्तर (सामान्य कोड/परिभाषाओं) पर परिभाषित 1 या अधिक बीन्स या बीन के कुछ गुणों को संभावित रूप से ओवरराइड कर सकता है। मैं सोच रहा हूं कि इसे संभालने का सबसे अच्छा तरीका क्या है।बाल संदर्भ में पैरेंट संदर्भ में परिभाषित बीन को ओवरराइड करना

उत्तर

32

वसंत आपको एक ही बीन नाम को कई बार फिर से परिभाषित करने की अनुमति देता है, और किसी दिए गए नाम के लिए संसाधित अंतिम बीन परिभाषा को जीतने वाला व्यक्ति होता है। तो उदाहरण के लिए, आपके पास एक एक्सएमएल फ़ाइल हो सकती है जो आपके मूल बीन्स को परिभाषित करती है, और क्लाइंट-विशिष्ट एक्सएमएल फ़ाइल में आयात करती है, जो उन बीन्स में से कुछ को फिर से परिभाषित करती है। हालांकि, यह थोड़ा नाजुक है, क्योंकि विशेष रूप से यह कहने के लिए कोई तंत्र नहीं है कि "यह बीन परिभाषा एक ओवरराइड है"।

मुझे पता चला है कि इसे संभालने का सबसे साफ तरीका new @Bean-syntax introduced in Spring 3 का उपयोग कर रहा है। एक्सएम के रूप में बीन्स को परिभाषित करने के बजाय, आप उन्हें जावा में परिभाषित करते हैं। तो आपके मूल बीन्स को एक @Bean -annotated क्लास में परिभाषित किया जाएगा, और आपके क्लाइंट कॉन्फ़िगरेशन उस उप-वर्ग को ओवरक्लूस करेंगे, और उपयुक्त बीन्स को ओवरराइड करेंगे। यह आपको मानक जावा @Override एनोटेशन का उपयोग करने की अनुमति देता है, स्पष्ट रूप से इंगित करता है कि दी गई बीन परिभाषा को ओवरराइड किया जा रहा है।

+0

क्या आप वाकई एक बच्चे के सीटीएक्स में एक ही आईडी/नाम के साथ एक बीन को फिर से परिभाषित कर सकते हैं? –

+9

इस पृष्ठ को देखकर http://stackoverflow.com/tags/spring/topusers मुझे लगता है कि वह जानता है कि वह –

+0

के बारे में क्या बात कर रहा है धन्यवाद। मैं उनकी पोस्ट की शुद्धता पर सवाल नहीं उठा रहा हूं। मैं उस विशेष वक्तव्य पर कुछ आश्वासन चाहता था क्योंकि मुझे अपने देव संसाधन द्वारा बताया गया है कि वसंत यानी 2.5.एक्स के बाद के संस्करणों में यह संभव नहीं है। उन्होंने एक ही नाम के साथ एक बच्चे के संदर्भ में बीन (जिसे मूल संदर्भ में परिभाषित किया गया था) को दोबारा परिभाषित करने की कोशिश की और स्टार्टअप के दौरान उन्हें एक त्रुटि मिली। –

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