2008-09-19 11 views
7

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

मेरा प्रश्न है: चूंकि सभी परियोजनाओं में सभी बीन्स का उपयोग नहीं किया जाता है, क्या मैं तत्काल नहीं होने पर संसाधनों को किसी भी महत्वपूर्ण राशि में बर्बाद कर रहा हूं? मुझे यकीन नहीं है कि कितना आलसी वसंत उन्हें लोड करने के बारे में है क्योंकि यह अब तक कोई मुद्दा नहीं रहा है।

कोई विचार?

उत्तर

7

Spring Reference Manual से लिया: ApplicationContext कार्यान्वयन के लिए

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

हालांकि, ऐसे समय होते हैं जब यह व्यवहार वांछित नहीं होता है। यदि आप अनुप्रयोगकॉन्टेक्स्ट का उपयोग करते समय सिंगलटन बीन को पूर्व-तत्काल नहीं करना चाहते हैं, तो आप एक बीन परिभाषा को आलसी-प्रारंभिक के रूप में चिह्नित करके इसे नियंत्रित कर सकते हैं। एक आलसी-प्रारंभिक बीन आईओसी कंटेनर को इंगित करता है कि स्टार्टअप पर बीन उदाहरण बनाया जाना चाहिए या जब इसे पहले अनुरोध किया गया हो।

एक्सएमएल के माध्यम से बीन्स को कॉन्फ़िगर करते समय, यह आलसी लोडिंग [बीन तत्व] पर 'आलसी-इनिट' विशेषता द्वारा नियंत्रित होती है; उदाहरण के लिए:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/> 

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

0

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

-1

वस्तुओं पर निर्भर करता है।

लेकिन, अप्रयुक्त कोड 'क्रुफ़्ट' है और रखरखाव की लागत में वृद्धि करेगा।

रेफरी और कक्षाओं को हटाने के लिए बेहतर। यदि उन्हें बाद में आवश्यकता हो तो आप हमेशा संस्करण नियंत्रण से पुनर्स्थापित कर सकते हैं।

+2

चूंकि सभी वर्गों का उपयोग किया जाता है, सिर्फ हर प्रोजेक्ट में नहीं, कुछ भी हटाना सवाल से बाहर है। –

5

अन्य टिप्पणियों के अलावा: <beans/> तत्व पर 'डिफ़ॉल्ट-आलसी-इनिट' विशेषता का उपयोग करके आलसी प्रारंभिक होने के लिए एक संपूर्ण कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट करना भी संभव है; उदाहरण के लिए:

<beans default-lazy-init="true"> 
    <!-- no beans will be pre-instantiated... --> 
</beans> 

यह, हर सेम को lazy-init विशेषता जोड़ने अगर आप उनमें से एक बहुत कुछ है की तुलना में बहुत आसान है।