2016-03-03 9 views
16

में विभिन्न संदर्भों का उद्देश्य और संबंध मैं वसंत बूट प्रोजेक्ट का उपयोग कर रहा हूं। मैं विभिन्न संदर्भों के उद्देश्य और संबंध को समझना चाहता हूं?वसंत

उदाहरण के लिए, वसंत सुरक्षा के संदर्भ में, वसंत प्रसंग, सर्वलेट प्रसंग, आदि (कुछ और ऐसे संदर्भों हैं?)

उत्तर

8

वहाँ अलग अलग व्याख्याओं हो सकता है, लेकिन यहाँ मैं इसे कैसे देखते हैं:

  • स्प्रिंग सुरक्षा संदर्भ, SecurityContext वर्ग के अर्थ में, प्रमाणीकरण, उपयोगकर्ता नाम, अधिकारियों (भूमिकाओं) और संभवतः रखती है वर्तमान उपयोगकर्ता के बारे में अन्य जानकारी। इस तरह के संदर्भ का जीवन वर्तमान अनुरोध है, या सत्र का उपयोग कर अनुरोधों के बीच सुरक्षा संदर्भ जारी है।

  • स्प्रिंग प्रसंग, ApplicationContext वर्ग के अर्थ में, एक चल स्प्रिंग आवेदन के केंद्रीय बिंदु है। इसका मुख्य उद्देश्य एप सिंगलटन बीन्स को शामिल करना है, लेकिन इसमें कई अन्य निफ्टी विशेषताएं हैं (कई अन्य उत्तरों में उल्लिखित हैं)। एक आवेदन में कई एप्लिकेशन कॉन्टैक्स हो सकते हैं, लेकिन सबसे आम, और सबसे सरल मामला, इसमें केवल एक ही है। वेब अनुप्रयोग आमतौर पर WebApplicationContext "एक्सटेंशन" का उपयोग करते हैं, जो इसे सर्वलेट संदर्भ के साथ एकीकृत करता है।

  • सर्वलेट प्रसंग, ServletContext वर्ग के अर्थ, आवेदन चौड़ा संदर्भ एक सर्वलेट webapp है। टोमकैट जैसे सर्वलेट कंटेनर में हमेशा एक वेबपैप उदाहरण है। यह वसंत का हिस्सा नहीं है। वसंत का उपयोग करते समय आप शायद ही कभी इसका इस्तेमाल करते हैं। लेकिन यह पृष्ठभूमि में है।

"संदर्भ" काफी सामान्य शब्द है, इसलिए आपके पर्यावरण में अन्य संदर्भ भी हो सकते हैं।

5

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

उदाहरण के लिए, यदि आप एक सर्वलेट का उपयोग कर एक आवेदन लोड आप पूरी तरह एक "रूट संदर्भ" वह भी सर्वलेट प्रसंग लोड करता है के रूप में यह बच्चे के साथ लोड कर सकते हैं।

पदानुक्रम निम्नलिखित "root" context ->any other context जैसा है। यह इत्ना आसान है।

एक वर्णित here in the Spring DocsApplicationContext प्रदान करता है: आवेदन घटकों तक पहुँचने के लिए

  • बीन कारखाने तरीकों।
  • क्षमता एक सामान्य फैशन में फ़ाइल संसाधन लोड करने के लिए (फैंसी new()dependency injection कहा जाता है का उपयोग किए बिना चीजें आप अपने आवेदन में की जरूरत के लिए बात करते हैं)। (properties और profiles साथ बाहरी विन्यास)
  • पंजीकृत श्रोताओं के लिए घटनाओं को प्रकाशित करने की क्षमता। ("कुछ चीजें कुछ होती हैं" के लिए फैंसी टॉक, observer pattern के बारे में पढ़ें)
  • अंतर्राष्ट्रीयकरण का समर्थन करने के लिए संदेशों को हल करने की क्षमता। एक माता पिता के संदर्भ से
  • विरासत (फ़ाइलें है कि सभी स्ट्रिंग्स अपने आवेदन में इस्तेमाल किया तो वे अलग अलग भाषाओं में गाया जा सकता है, के बारे में MessageSource पढ़ें)। (जैसे कि मैंने पहले, आपके आवेदन की जरूरत है "संदर्भ" कहा और यह वह जगह है जहां यह शुरू होता है।)

आप स्प्रिंग बूट का उपयोग कर रहे हैं, केवल एक ही डिफ़ॉल्ट रूप से संदर्भ नहीं है: ApplicationContext। इसमें आपकी सभी चीज़ें (बीन्स) और घटक शामिल होंगे जो आपको चाहिए।

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

अंत में "संदर्भ" अपने आवेदन के द्वारा बनाई गई और परिभाषित किया गया है, एक विन्यास के रूप में लगता है कि आपके आवेदन को परिभाषित करता है (यह XML या जावा हो)। "इसमें" क्या है और काम करने के लिए "इसकी क्या ज़रूरत है"।

आप कोशिश करते हैं और समझते हैं कि यह अधिक मैं शुरू से ही पढ़ सकते हैं और Introduction to Spring साथ शुरू करने के लिए आप से आग्रह करता हूं होगा चाहते हैं।

+0

सही वेब आधारित वसंत एप्लिकेशन द्वारा भी servlet के शीर्ष पर चलाया जाता है? तो अगर मैं "रूट" संदर्भ कहता हूं -> "सर्वलेट" संदर्भ -> "वसंत" संदर्भ सही है? – Harshana

+0

मूल संदर्भ "मूल संदर्भ" है, इसलिए सर्वलेट संदर्भ मूल संदर्भ से प्राप्त होता है, क्योंकि यह बच्चा है। इस तरह के बारे में सोचें ... आप रूट की संदर्भ को एप्लिकेशन की ज़रूरतों (सेवाओं, आदि) के साथ बनाते हैं, लेकिन सर्वलेट संदर्भ केवल "चीजें" को तत्काल करता है जिसे इसे सर्वलेट होने की आवश्यकता होती है। याद रखें, आपके पास प्रति कंटेनर एकाधिक एकाधिकलेट हो सकते हैं और वे सभी "रूट एप्लिकेशन संदर्भ" साझा कर सकते हैं यह समझने के लिए महत्वपूर्ण है कि यह सब एक साथ कैसे फिट बैठता है। – dkanejs

+0

ठीक है धन्यवाद। जब सर्वलेट और वसंत संदर्भ की बात आती है, तो अगर मैं कहता हूं कि सर्वलेट संदर्भ वसंत संदर्भ का अभिभावक है या क्या यह भाई संबंध है? वसंत भी सर्वलेट संदर्भ का उपयोग कर सकते हैं लेकिन इसके विपरीत नहीं? क्या वो सही है? – Harshana

3

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

ServletContext

ServletContextServlet technology का हिस्सा है। कई ढांचे इस तकनीक पर आधारित हैं (जेएसएफ, स्प्रिंग, स्ट्रूट्स और कई)। ServletContext में अपने सर्वलेट कंटेनर (जैसे टोमकैट, ग्लासफ़िश आदि) के साथ संवाद करने की कार्यक्षमता शामिल है। मूल बातें ServletContext प्रदान करता है:

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

जैसा कि आप देख ही बुनियादी कार्यक्षमता है, कि आवेदन में कहीं भी उपयोगी हो सकता है, यदि आप सर्वलेट प्रौद्योगिकी के साथ काम करेंगे की तरह अतिरिक्त जानकारी प्राप्त (उदाहरण के लिए, एक और विकसित इसके आधार पर एक एमवीसी-फ्रेमवर्क)।

ApplicationContext

ApplicationContextSpring framework अनुप्रयोग का मुख्य इंटरफेस है। इसमें बहुत सारे कार्यान्वयन हैं। उनमें से एक xml-file (ClassPathXmlAplicationContext) से कॉन्फ़िगरेशन लोड करता है, कोई अन्य एनोटेशन (एनोटेशन कॉन्फिग एप्प्लिकेशन कॉन्टेक्स्ट) पर आधारित कॉन्फ़िगरेशन लोड करता है और इसी तरह।मूल बातें जो ApplicationContext प्रदान करती है:

  • बीन कारखाना, बीन परिभाषाओं के आधार पर नए सेम बनाने की क्षमता;
  • विभिन्न स्रोतों से लोड संसाधन (फ़ाइल सिस्टम, जार फाइलें, यूआरएल इत्यादि);
  • घटनाओं को प्रकाशित और सुनने की क्षमता;
  • संदेश बंडलों से संदेशों को हल करें;

फिर से, शुरुआत में शुरू हुआ, यह मूल कार्यक्षमता आपके आवेदन में लगभग कहीं भी उपयोगी हो सकती है। यही कारण है कि यह संदर्भ में एकत्रित किया। पृष्ठभूमि में उपयोग की जाने वाली कई कक्षाएं, इस क्षमताओं को प्रदान करने के लिए, लेकिन आपको यह जानना है कि इस कार्यक्षमता का उपयोग करने के लिए - बस ApplicationContext

SecurityContext

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