आप LocaleContextHolder
के लिए स्रोत कोड को देखो, तो आप इसे एक ThreadLocal
चर है देखेंगे (यह दो वास्तव में है)
private static final ThreadLocal<LocaleContext> localeContextHolder =
new NamedThreadLocal<LocaleContext>("Locale context");
आप, क्या एक ThreadLocal
है के बारे में है, लेकिन हमारे लिए पढ़ सकते हैं इस बात पर विचार एक डेटा संरचना जो वर्तमान निष्पादन थ्रेड की आईडी को अपने सामान्य प्रकार, LocaleContext
के किसी ऑब्जेक्ट पर मैप करती है।
एक सर्वलेट कंटेनर में धागे का एक पूल होता है जो क्लाइंट अनुरोधों को संभालने के लिए उपयोग करता है। जब कोई अनुरोध आता है, तो यह इन धागे में से एक निकाल देगा और आपके सर्वलेट की service()
विधि निष्पादित करेगा। वसंत के साथ, परिणामस्वरूप DispatcherServlet
निष्पादन और आपके @Controller
के हैंडलर विधि को बुलाया जा रहा है। यह सब उस मूल Thread
सर्वलेट कंटेनर में चुना जाता है।
तो जब आपकी @Service
कक्षा 'विधि कॉल हो जाती है, तो आप अभी भी उसी धागे में हैं।
ThreadLocal
LocaleContextHolder
में विधि initContextHolders()
doGet()
, doPost()
में से प्रत्येक में processRequest()
द्वारा कहा जाता है, आदि तरीकों (जो DispatcherServlet
की मूल प्रकार है) FrameworkServlet
में अनुरोध प्रसंस्करण में कुछ बिंदु जल्दी पर पर set()
है। Locale
HttpServletRequest
से getLocale()
विधि के साथ बनाया गया है।
स्रोत
2013-09-05 19:08:58
बहुत अच्छी स्पष्टीकरण, मुझे इस तरह के सार प्राप्त करने के लिए बहुत सी पढ़ाई बचाओ। एक और सवाल यह है कि कंटेनर में धागे का एक पूल होता है, एक 'लोकेल कॉन्टेक्स्टहोल्डर प्रति थ्रेड' तो क्या इसका मतलब यह है कि प्रत्येक 'धागा' का समर्थन 'डिस्पैच सर्लेट' और प्रत्येक 'प्रेषण' को 'लोकेल कॉन्टेक्सहोल्डर' रखता है? अग्रिम में धन्यवाद। – Dreamer
@ ड्रीमर बिल्कुल नहीं। प्रत्येक थ्रेड में 'लोकेल कॉन्टेक्स्ट' होगा (यदि यह 'थ्रेडलोकल' पर 'सेट()' है)। सर्वलेट कंटेनर द्वारा उत्पन्न 'थ्रेड' में 'रन()' विधि है जिसमें आपके 'डिस्पैचर सर्वलेट' का संदर्भ है जिसका उपयोग 'HttpServletRequest' और' HttpServletREsponse' ऑब्जेक्ट्स 'के साथ विधियों को कॉल करने के लिए किया जाता है। आपके '@ नियंत्रक' विधियों में 'डिस्पैटर सर्वलेट _ _ispatches_। 'लोकेल कोंटेक्सहोल्डर' 'लोकेल कोंटेक्सहोल्डर' वर्ग का 'स्थिर' फ़ील्ड है। –
महान जवाब! – Dreamer