2013-03-04 7 views
29

मैं उपनाम के उपयोग पर उलझन में हूं। मैं समझता हूं कि उपनाम क्या है और इसका उपयोग कैसे किया जा रहा है, लेकिन मुझे नहीं लगता कि यह बीन परिभाषा पर नामों का उपयोग करने से अलग कैसे हो सकता है।वसंत - उपनाम बनाम नाम

<bean id="xyx" name="abc,def" .. /> 

<alias name="xyx" alias="pqr"/> 

उपनाम जब मैं एबीसी या डीफ़ का उपयोग कर सकता हूं?

उत्तर

21

मेरे दिमाग में बीन एलियासिंग बड़े सिस्टम में सहायक हो सकता है, जहां आप बीन नामों में हेरफेर नहीं कर सकते हैं। आप सिस्टम के अपने हिस्से के लिए अपने खुद के नाम (उपनाम) विशिष्ट बनाने का विकल्प ...

स्प्रिंग प्रलेखन से (3.0.x) http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/

है ... यह कभी कभी देने के लिए वांछनीय है एक भी सेम कई नामों, अन्यथा सेम अलियासिंग के रूप में जाना ...

इसलिए या/और अलियासिंग कई नामों बनाने एक ही बात कर रहे हैं।

+3

जब आप नाम उपयोग उपनाम को बदल/संशोधित नहीं कर सकते हैं, तो जब आप नाम उपयोग नाम –

+1

जोड़ सकते हैं तो एक उदाहरण मैं सोच सकता हूं कि क्या बीन आप उपनाम करना चाहते हैं, किसी अन्य संदर्भ XML से आयात किया गया है जिसे आप नहीं कर सकते या नहीं कर सकते संपादित करना चाहते हैं। – beny23

+0

@ beny23 क्या आप मुझे उदाहरण दे सकते हैं? मेरे लिए समझना आसान .. thx – yapkm01

1

उर्फ ​​जिनमें एक से अधिक नाम नहीं हैं एक विशिष्ट परिदृश्य का उपयोग कर दिया गया है:

अपनी परियोजना, जिनमें से अधिकांश अपने सहयोगियों द्वारा लेखक कर रहे हैं में एक से अधिक config एक्सएमएल फ़ाइलें कल्पना कीजिए, और आप अपने खुद के config.xml जोड़ने की जरूरत फ़ाइल। आप अपने सहयोगी की कॉन्फ़िगरेशन फ़ाइलों को स्पर्श किए बिना, किसी अन्य कॉन्फ़िगरेशन फ़ाइल में परिभाषित एक बीन को संदर्भित कर सकते हैं जो आपके कॉन्फ़िगरेशन के लिए अधिक अर्थपूर्ण हो सकता है।

0

मुझे हाल ही में एक और उपयोग का मामला मिला जहां उर्फ ​​ने आसानी से समस्या हल की।

जब ऑटो कॉन्फ़िगरेशन सक्रिय होता है, तो स्प्रिंग बूट बीन serverProperties प्रदान करता है जिसका उपयोग वर्तमान में वेब ऐप चलाने वाले सर्वर के बारे में जानकारी तक पहुंचने के लिए किया जा सकता है।

एकीकरण परीक्षण में (यानी जब @SpringBootTest एनोटेशन मौजूद है) वही बीन org.springframework.boot.autoconfigure.web.ServerProperties नाम के तहत उपलब्ध है।

बेशक एकीकरण परीक्षण के लिए एक अलग प्रोफ़ाइल का उपयोग करना संभव है, लेकिन इसके लिए कई स्थानों पर कॉन्फ़िगरेशन के मैन्युअल परिवर्तन की आवश्यकता होगी। हालांकि, बस

<alias name="serverProperties" alias="org.springframework.boot.autoconfigure.web.ServerProperties"/> 

समान कॉन्फ़िगरेशन फ़ाइलों का उपयोग एकीकरण परीक्षण और उत्पादन में किया जा सकता है।

यह स्प्रिंग बूट में एक बग हो सकता है, हालांकि उपनाम आसानी से समस्या को हल किए बिना समस्या को हल कर सकता है। और निश्चित रूप से मुझे बूट कॉन्फ़िगरेशन को बदलने की कोई संभावना नहीं है।

1

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

+0

हालांकि आप मूल बीन परिभाषा को छू नहीं रहे हैं, लेकिन आखिरकार रनटाइम पर चलने वाला कोड आपकी नई बीन परिभाषा से होगा? –

1

एक उपयोग केस हो सकता है जब आप कुछ बीन्स को कस्टमाइज़ करना चाहते हैं जो पहले से ही मॉड्यूलर एप्लिकेशन में परिभाषित किया गया है (प्रत्येक मॉड्यूल उदाहरण के लिए एक वसंत परियोजना है), बीन शायद तीसरे भाग के ढांचे/एपीआई या यहां तक ​​कि आपकी टीम द्वारा परिभाषित किया गया हो ।उस मामले में आप देखेंगे कि आपके वसंत परियोजना अन्य मॉड्यूल (परियोजनाओं) में फेरबदल के बिना अनुकूलित संस्करण फोन केवल अंदर, कि बस अपने वसंत विन्यास में उर्फ ​​जो वास्तव में एक शक्तिशाली सुविधा है जोड़ने क्या करना चाहते हैं:

<alias alias="globalBeanService" name="customizedBeanService" /> 

इसलिए, जब भी वसंत वैश्विक BeanService के लिए एक कॉल पाता है, तो यह आपके विशिष्ट मॉड्यूल के अंदर आपके लिए अनुकूलित BeanService इंजेक्ट करेगा। इस सुविधा के बिना, आपको सभी कक्षाओं के माध्यम से जाना चाहिए और बीन मैन्युअल रूप से संशोधित करना चाहिए !!

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