2013-02-28 6 views
5

मुझे इस विषय के बारे में कुछ संदेह हैं। अधिकांश स्प्रिंग बीन्स (दाओ, सेवाओं और नियंत्रकों) के लिए हमारे आवेदन में हम "अनुरोध" दायरे का उपयोग करते हैं। यह दृष्टिकोण हमें स्मृति उपयोग को कम करने और स्टेटलेस टायर बनाने की अनुमति देता है। लेकिन दूसरी ओर हम वसंत संदर्भ प्रारंभ करने पर हर अनुरोध पर perfomance ढीला। मैं कुछ बीन्स बनाने के बारे में सोचता हूं, उदा। "सिंगलटन" या "प्रोटोटाइप" दायरे में डीएओ परत।वेब अनुप्रयोग में वसंत सेम स्कॉप्स। सर्वोत्तम अभ्यास

आप अपने अनुप्रयोगों में कौन सी तकनीकों का उपयोग करते हैं? शायद स्प्रिंग वेब एप्लिकेशन सेम स्कॉप्स को डिजाइन करने के लिए कुछ सलाह मौजूद हैं?

+0

वे दायरे का अनुरोध क्यों कर रहे हैं? क्या उनके पास सदस्य डेटा है? –

उत्तर

12

सामान्य नियम है कि मैं जब निर्णय लेने से प्रयोग होता हैं निम्नलिखित:

लंबे जीवनकाल वाले राज्य

यह जब राज्य से अधिक अनुरोध से अधिक संरक्षित किए जाने की आवश्यकता है (http)। इस मामले में सत्र स्कोप में स्टोर करना समझ में आता है।

अल्पकालिक राज्य

जब आप किसी विशेष अनुरोध के लिए राज्य बने रहने की जरूरत है। शायद आप एक फॉर्म के लिए बैकिंग बीन की तरह कुछ लागू कर रहे हैं। इस स्थिति में मैं अनुरोध स्कोप का उपयोग करता हूं।

कोई राज्य

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

अपने मामले में, आपके डीएओ & सेवाओं को स्टेटलेस होना चाहिए (यदि वे पुनर्विचार नहीं कर रहे हैं कि आपने उन्हें कैसे लागू किया है) और इसलिए सिंगलेट होना चाहिए। नियंत्रक फिर से सिंगलटन होना चाहिए हालांकि आपके लिए प्रश्न है क्या उनमें राज्य शामिल है?। मैं स्मृति खपत के बारे में ज्यादा चिंता नहीं करता, याद रखें सभी बुराइयों की जड़ समयपूर्व अनुकूलन है। सर्वोत्तम अभ्यास के साथ चिपकाएं और यदि यह काम नहीं करता है तो इसे ठीक करें।

5

सिंगलटन: स्प्रिंग आईओसी कंटेनर प्रति एक ऑब्जेक्ट उदाहरण के लिए एक एकल बीन परिभाषा को स्कॉप्स करता है।

प्रोटोटाइप: किसी भी ऑब्जेक्ट इंस्टेंस के लिए एक एकल बीन परिभाषा को स्कॉप्स करता है।

अनुरोध: एक HTTP अनुरोध के जीवन चक्र को एक एकल बीन परिभाषा को स्कॉप्स करता है; यह है कि प्रत्येक HTTP अनुरोध में एक बीन परिभाषा के पीछे बनाए गए बीन का अपना उदाहरण होगा। वेब-जागरूक स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट के संदर्भ में केवल मान्य है।

सत्र: एक HTTP सत्र के जीवन चक्र के लिए एक एकल बीन परिभाषा को स्कॉप्स करता है। वेब-जागरूक स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट के संदर्भ में केवल मान्य है।

वैश्विक सत्र: वैश्विक HTTP सत्र के जीवन चक्र को एक एकल बीन परिभाषा को स्कॉप्स करता है।पोर्टल संदर्भ में उपयोग किए जाने पर आम तौर पर केवल वैध। वेब-जागरूक स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट के संदर्भ में केवल मान्य है।

इस जानकारी के अलावा, आप के रूप में @Repository, @Controller और के साथ अपने सेवा लेयर @Service के साथ अपने नियंत्रक अपने डीएओ को चिह्नित करना चाहिए।

Service, Repository and Controller Discussion

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