2011-02-27 11 views
44

मैं वसंत में ApplicationContext पदानुक्रमों को समझने की कोशिश कर रहा हूं।स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट पदानुक्रम का उपयोग क्यों करें?

मैंने सीखा निम्नलिखित

  1. एक ApplicationContext 1 से अधिक माता पिता ApplicationContext नहीं हो सकता।
  2. जब दिया गया एप्लिकेशनकॉन्टेक्स्ट बीन को हल नहीं कर सकता है, तो यह अपने माता-पिता से अनुरोध को हल करेगा।
  3. के माता-पिता एक अनुप्रयोगकॉन्टेक्स्ट को इसके निर्माता में निर्दिष्ट किया गया है।

मैं समझना चाहता हूं कि एप्लिकेशनकॉन्टेक्स्ट पदानुक्रमों (एक एकल एप्लिकेशन कॉन्टेक्स्ट के बजाय) का उपयोग कब करना है।

Google से सबसे अच्छा मैं प्राप्त कर सकता था this। और जो मैं समझता हूं वह यह है कि यदि किसी एप्लिकेशन में विभिन्न परतों पर परिभाषित बीन्स की बड़ी संख्या होती है तो प्रत्येक परत का अपना एप्लीकेशन कॉन्टेक्स्ट लाभ होगा। क्या समझा नहीं जाता है ऐसा करने का लाभ क्या है और लाभ कैसे प्राप्त किया जाता है?

TIA, विजय

उत्तर

43

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

आप इस पैटर्न को आगे ले सकते हैं, उदाहरण के लिए यदि आपके पास एक ही जावाईई ईएआर में बंडल किए गए एकाधिक वेबएप हैं। यहां, ईएआर का अपना संदर्भ हो सकता है, जो व्यक्तिगत वेबैप संदर्भों का अभिभावक है, जो सर्वलेट संदर्भों का अभिभावक है, और इसी तरह। आपके पास जिम्मेदारी का पदानुक्रम है।

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

+6

आगे पढ़ने में, निम्नलिखित समझ गए (स्काफमैन ने पहले से ही इसके कुछ हिस्सों को इंगित किया है)। प्रत्येक स्प्रिंग एमवीसी वेबएप में एक रूट अनुप्रयोग संदर्भ और प्रत्येक डिस्पैचर सर्वलेट के लिए एक सर्वलेट अनुप्रयोग संदर्भ है। रूट अनुप्रयोग संदर्भ प्रत्येक सर्वलेट अनुप्रयोग संदर्भ का अभिभावक है। "संदर्भ कॉन्फिग्लोकेशन" (वेब.एक्सएमएल में संदर्भ-पैरा) में परिभाषित बीन्स रूट अनुप्रयोग संदर्भ में लोड किए गए हैं। -servlet.xml में बीन्स सर्वलेट अनुप्रयोग संदर्भ में लोड किए गए हैं। यदि किसी ईएआर में कई वेब ऐप्स हैं, तो ईएआर स्तर का एप्लिकेशन संदर्भ ईएआर में प्रत्येक वेबैप के रूट संदर्भ को मूल कर सकता है। –

+0

@ उपयोगकर्ता 636334: हाँ, यह है। – skaffman

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