2011-09-16 14 views
36

XmlWebApplicationContext जावाडोक से:वसंत-एमवीसी: "संदर्भ" और "नामस्थान" क्या हैं?

डिफ़ॉल्ट रूप से, विन्यास "/WEB-INF/applicationContext.xml" से जड़ संदर्भ के लिए ले जाया जाएगा, और के लिए "/WEB-INF/test-servlet.xml" नेमस्पेस "टेस्ट-सर्वलेट" के साथ एक संदर्भ (जैसे Servlet-name "test" के साथ एक डिस्पैचर सर्वलेट उदाहरण के लिए)।

वसंत संदर्भ का क्या अर्थ है?

जड़ संदर्भ क्या है? अन्य प्रकार के वसंत संदर्भ क्या हैं?

एक नाम स्थान क्या है?

अद्यतन:

कुछ अनुवर्ती सवाल:

  1. एक वसंत ApplicationContext क्या है - यह कुछ "बात" है कि सेम है कि एक विन्यास एक्सएमएल फ़ाइल में परिभाषित कर रहे हैं रखती है?

  2. ContextLoaderListener के कोड को देखते हुए, ऐसा लगता है कि यह कॉन्फ़िगरेशन XML फ़ाइल में परिभाषित डेटा लोड करता है। लेकिन मेरा स्प्रिंग वेब ऐप इस श्रोता या किसी अन्य श्रोता को परिभाषित किए बिना काम करता है। ऐसा कैसे हो सकता है?

  3. वसंत के डिस्पैचर सर्वलेट के एक से अधिक उदाहरण होने के लिए किन स्थितियों में यह समझदारी होगी?

  4. , जड़ संदर्भ (applicationContext.xml से डेटा) DispatcherServlet के प्रत्येक उदाहरण के लिए लागू है, जबकि (परीक्षण servlet.xml से जैसे डेटा) अन्य संदर्भों केवल प्रासंगिक DispatcherServlet (अर्थात परीक्षण) के लिए लागू?

उत्तर

22

"वसंत संदर्भ" = एक Spring ApplicationContext

"वेब संदर्भ के संदर्भ में" मूल संदर्भ "का अर्थ मुख्य संदर्भ है जो वेबपैड द्वारा लोड और उपयोग किया जाता है। आमतौर पर, आप रूट संदर्भ को ContextLoaderListener से शुरू करेंगे।

मूल संदर्भ वास्तव में संदर्भ का "दयालु" नहीं है। यह सिर्फ एक भूमिका है कि एक संदर्भ खेलता है। आपके पास वेबपैप में एक रूट संदर्भ है। अन्य संदर्भ रूट संदर्भ नहीं हैं। वे आम तौर पर मूल संदर्भ के बच्चे होते हैं।

यहां एक नामस्थान स्प्रिंग के डिस्पैचर सर्वलेट के उदाहरण के दायरे को संदर्भित करता है। यह सब ठीक कह रहा है कि यदि आप अपने वेब.एक्सएमएल में अपने सर्वलेट "टेस्ट" का नाम देते हैं, तो सम्मेलन के अनुसार, वसंत उस प्रेषक के संदर्भ के रूप में उपयोग करने के लिए "test-servlet.xml" नाम की एक फ़ाइल की तलाश करेगा। संयोग से, इस तरह के प्रत्येक संदर्भ जो एक प्रेषक के लिए बनाया गया है, मूल संदर्भ का बच्चा बन जाता है।

संपादित करें: अपने नए सवालों के जवाब देने के लिए:

  1. मेरा उत्तर ApplicationContext के बारे में जानने के लिए की पहली पंक्ति में लिंक का पालन करें। यदि आपके पास प्रश्नों का उत्तर नहीं दिया गया है, तो मैं एक नया SO प्रश्न पोस्ट करने का सुझाव दूंगा।
  2. मूल संदर्भ वैकल्पिक है। यदि आपके पास ContextLoaderListener परिभाषित नहीं है, तो आपके पास रूट संदर्भ नहीं है।जब आप डिस्पैचर सर्वलेट का उपयोग करते हैं, तो यह अपना स्वयं का एप्लीकेशन कॉन्टेक्स्ट शुरू करता है, और इसे वहां से प्राप्त होने वाले सेम प्राप्त होंगे।
  3. मुझे अपने सिर के ऊपर से एक के बारे में पता नहीं है। मुझे लगता है कि अगर आपके ऐप में कुछ यूआरएल संसाधनों के बीच भारी रूप से अलग विन्यास की आवश्यकता है, तो यह आपको ऐसा करने के लिए प्रेरित कर सकता है।
  4. हां। इसे उचित शर्तों में बताने के लिए, रूट संदर्भ डिस्पैटर सर्वलेट के लिए शुरू किए गए किसी भी संदर्भ का मूल संदर्भ है। माता-पिता के संदर्भ में बीन्स बच्चे के संदर्भ के माध्यम से सुलभ होते हैं, लेकिन विपरीत नहीं है।
+0

@rapt: यह बहुत सारी टिप्पणियों के लिए वास्तव में उपयुक्त नहीं है। आप इन प्रश्नों को उपरोक्त प्रश्न में क्यों नहीं जोड़ते हैं या एक नया प्रश्न शुरू नहीं करते हैं? –

+0

धन्यवाद, बस मेरे मूल पोस्ट में मेरे प्रश्न जोड़े गए। – rapt

+0

उत्तर –

8

वेब अनुप्रयोग में, आर्किटेक्चर आमतौर पर लोकप्रिय एमवीसी संरचना जैसे परतों में विभाजित होता है। तो एक वेब ऐप मूल रूप से एक परत के होते हैं जो क्लाइंट अनुरोधों को संभालता है i.e HTTPRequests और वह परत जो उन अनुरोधों को सेवाएं देती है।

संक्षेप में: कक्षाएं जो एचटीपी अनुरोधों को संभालने के लिए हैं, यानी नियंत्रक जो यूआरएल में मैप किए जाते हैं, test-servlet.xml के अंतर्गत आते हैं। इसे WebapplicationContext के रूप में जाना जाता है जिसमें केवल बीन्स होते हैं जिन्हें मुख्य रूप से क्लाइंट अनुरोधों को संभालने के लिए आवश्यक होते हैं।

अब अगला भाग सेवा/दाओ परत है जिसमें आपके व्यावसायिक तर्क शामिल हैं। ऐसे तर्क करने वाले बीन्स एप्लिकेशनकॉन्टेक्स्ट ऑब्जेक्ट के तहत लोड किए जाते हैं।

अब आप पूछ सकते हैं कि उन्होंने इन चीजों को फाइलों या दो अलग-अलग वस्तुओं में क्यों अलग किया है।

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

+0

ठीक है, इसमें से कुछ के पास मेरे प्रश्नों के साथ कुछ लेना देना नहीं है। लेकिन बाकी के लिए मैं समझ नहीं पाया कि आप क्या कहने की कोशिश कर रहे थे। – rapt

+0

मैं यह बताने की कोशिश कर रहा था कि दो प्रकार के संदर्भ क्यों शुरू हुए हैं। एक जिसे आप root.xml के रूप में बुला रहे थे और अन्य test-servlet.xml के साथ। आईएमएचओ, मैंने 1,2 और 4 प्रश्नों का उत्तर दिया। मेरा बुरा, अगर मैं इसे ठीक से समझा सकता हूं :) – hellojava

+0

मुझे लगता है कि # 2 एक अच्छा जवाब और प्रासंगिक था – user3799365

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