आगे पढ़ने से पहले रूट और बाल संदर्भ, कृपया समझते हैं कि -
वसंत में एक समय में कई संदर्भ हो सकते हैं। उनमें से एक रूट संदर्भ होगा, और अन्य सभी संदर्भ बाल संदर्भ होंगे।
सभी बाल संदर्भ जड़ संदर्भ में परिभाषित सेम तक पहुंच सकते हैं; लेकिन इसके विपरीत सच नहीं है। रूट संदर्भ बाल संदर्भ सेम तक नहीं पहुंच सकता है।
ApplicationContext:
ApplicationContext.xml हर वेब एप्लिकेशन के लिए रूट संदर्भ कॉन्फ़िगरेशन है। स्प्रिंग एप्लिकेशन को कोन्टेक्स्ट.क्सएमएल लोड करता है और पूरे अनुप्रयोग के लिए ApplicationContext बनाता है। प्रति वेब एप्लिकेशन पर केवल एक आवेदन संदर्भ होगा। यदि आप स्पष्ट रूप से web.xml में संदर्भ कॉन्फ़िगरेशन फ़ाइल नाम का संदर्भ नहीं दे रहे हैं, तो संदर्भकॉन्फ़्लिक्टेशन परम का उपयोग करते हुए, स्प्रिंग WEB-INF फ़ोल्डर के तहत ApplicationContext.xml की खोज करेगा और यदि यह फ़ाइल नहीं मिली तो FileNotFoundVception को फेंक दें।
ContextLoaderListener रूट अनुप्रयोग संदर्भ के लिए वास्तविक आरंभीकरण कार्य करता है। एक "ReferenceConfigLocation" संदर्भ-परम को पढ़ता है और इसके उदाहरण को संदर्भ उदाहरण में देता है, इसे संभावित रूप से कई फ़ाइल पथों में पार्स करता है, जिसे किसी भी संख्या में अल्पविराम और रिक्त स्थान द्वारा अलग किया जा सकता है, जैसे "WEB-INF / application.ontext1.xml, WEB-INF / applicationContext2.xml "। ContextLoaderListener वैकल्पिक है। बस यहाँ एक बिंदु बनाने के लिए: आप कभी भी ContextLoaderListener को कॉन्फ़िगर किए बिना एक स्प्रिंग एप्लिकेशन को बूट कर सकते हैं, डिस्पैसरसेर्वलेट के साथ बस एक मूल न्यूनतम web.xml।
DispatcherServlet DispatcherServlet अनिवार्य रूप से एक सर्वलेट है (यह HttpServlet को विस्तारित करता है) जिसका प्राथमिक उद्देश्य कॉन्फ़िगर किए गए URL पैटर्न से मेल खाते आने वाले वेब अनुरोधों को संभालना है। यह एक आने वाली यूआरआई लेता है और नियंत्रक और दृश्य का सही संयोजन पाता है। तो यह सामने नियंत्रक है।
जब आप स्प्रिंग कॉन्फ़िगरेशन में एक डिस्पैसरसर्वलेट को परिभाषित करते हैं, तो आप रेफ़रेंस वर्ग की प्रविष्टियों के साथ एक्सएमएल फ़ाइल प्रदान करते हैं, संदर्भकॉन्फ़्लेक्शन विशेषता का उपयोग करके मैपिंग आदि को देखते हैं।
WebApplicationContext ApplicationContext के अलावा, एक ही वेब एप्लिकेशन में कई WebApplicationContext हो सकते हैं। सरल शब्दों में, प्रत्येक DispatcherServlet एकल WebApplicationContext के साथ जुड़ा हुआ है। xxx-servlet.xml फ़ाइल DispatcherServlet के लिए विशिष्ट है और एक वेब अनुप्रयोग में अनुरोधों को संभालने के लिए एक से अधिक DispatcherServlet कॉन्फ़िगर हो सकते हैं। ऐसे परिदृश्यों में, प्रत्येक डिस्पैचरवार्लेट में एक अलग xxx-servlet.xml कॉन्फ़िगर किया गया होगा। लेकिन, सभी servlet कॉन्फ़िगरेशन फ़ाइलों के लिए ApplicationContext.xml आम होगा। स्प्रिंग आपके वेबऐप्स WEB-INF फोल्डर से “xxx-servlet.xml” नाम की डिफॉल्ट लोड फाइल करेगा, जहां xxx web.xml में सर्वलेट नाम है। यदि आप उस फ़ाइल का नाम बदलना चाहते हैं या स्थान बदलना चाहते हैं, तो संदर्भ नाम के साथ संदर्भ के रूप में दीक्षा-परम जोड़ें।
उनके बीच तुलना और संबंध:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener रूट एप्लिकेशन संदर्भ बनाता है। DispatcherServlet प्रविष्टियाँ एक बच्चा अनुप्रयोग संदर्भ प्रति सर्वलेट प्रविष्टि बनाती हैं। बाल संदर्भ जड़ संदर्भ में परिभाषित बीन्स तक पहुंच सकते हैं। बाल संदर्भों में बीन्स बाल संदर्भों (सीधे) में सेम तक नहीं पहुंच सकते हैं। सभी संदर्भों को ServletContext में जोड़ा जाता है। आप WebApplicationContextUtils वर्ग का उपयोग करके रूट संदर्भ तक पहुँच सकते हैं।
वसंत प्रलेखन पढ़ने के बाद, निम्नलिखित समझ है:
a) एप्लिकेशन-कॉन्टेक्ट्स पदानुक्रम हैं और इसलिए WebApplicationContexts हैं। यहाँ प्रलेखन देखें।
b) ContextLoaderListener वेब-एप्लिकेशन के लिए एक रूट वेब-एप्लिकेशन-संदर्भ बनाता है और इसे ServletContext में डालता है। इस संदर्भ का उपयोग स्प्रिंग-प्रबंधित बीन्स को लोड-अनलोड करने के लिए किया जा सकता है, जो इस बात से संबंधित है कि नियंत्रक परत (स्ट्रट्स या स्प्रिंग एमवीसी) में किस तकनीक का उपयोग किया जा रहा है।
c) DispatcherServlet अपना खुद का WebApplicationContext बनाता है और हैंडलर / कंट्रोलर / व्यू-रिसॉल्वर इस संदर्भ द्वारा प्रबंधित किए जाते हैं।
d) जब ContextLoaderListener को DispatcherServlet के साथ मिलकर उपयोग किया जाता है, तो एक रूट वेब-एप्लिकेशन-संदर्भ पहले कहा गया है और DispatcherSerlvet द्वारा एक बाल-संदर्भ भी बनाया जाता है और रूट एप्लिकेशन-संदर्भ से जुड़ा होता है। यहाँ प्रलेखन देखें।
जब हम स्प्रिंग एमवीसी के साथ काम कर रहे हैं और सेवाओं की परत में स्प्रिंग का उपयोग कर रहे हैं, तो हम दो एप्लिकेशन-संदर्भ प्रदान करते हैं। पहले एक को कॉन्टेक्स्टालैडरलिस्टनर और दूसरे को डिस्पैचरसर्वलेट के साथ कॉन्फ़िगर किया गया है
आम तौर पर, आप डिस्पैचरसर्वलेट संदर्भ में सभी एमवीसी संबंधित बीन्स (नियंत्रक और विचार आदि) को परिभाषित करेंगे, और सभी क्रॉस-कटिंग बीन्स जैसे कि सुरक्षा, लेन-देन, सेवाओं आदि को संदर्भ के संदर्भ में कॉन्टेक्स्टालैडरलिस्टनर द्वारा।
अधिक जानकारी के लिए इसे देखें:
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html