मुझे स्प्रिंग बीन्स के विभिन्न क्षेत्रों की स्पष्ट समझ है। लेकिन मैं एंटरप्राइज़ स्तरीय परियोजनाओं में एक बीन के प्रोटोटाइप दायरे के कुछ उपयोग मामलों की तलाश में हूं। यह बहुत अच्छा होगा यदि आप प्रोटोटाइप स्कोप के कुछ वास्तविक जीवन उपयोग मामलों को साझा कर सकते हैं (अनुरोध स्कोप नहीं)।वसंत प्रोटोटाइप गुंजाइश - मामलों का उपयोग करें?
उत्तर
मैंने ज्यादातर वसंत lookup-method
के संयोजन के साथ प्रोटोटाइप का उपयोग किया है। मेरा आवेदन game server है जिसे टीसीपी पोर्ट पर इनकमिंग बाइट्स को डीकोड करने की आवश्यकता है। निम्नलिखित सेम परिभाषा
<bean id="channelBufferProtocol" class="org.menacheri.protocols.impl.ChannelBufferProtocol">
<lookup-method name="createLengthBasedFrameDecoder" bean="lengthFieldBasedFrameDecoder"/>
<property name="eventDecoder" ref="eventDecoder"></property>
<property name="lengthFieldPrepender" ref="lengthFieldPrepender"></property>
<property name="eventEncoder" ref="eventEncoder"></property>
</bean>
प्रोटोकॉल कार्यान्वयन वर्ग के अंदर पर विचार करें, मैं फ्रेम विकोडक pipeline.addLast("lengthDecoder", createLengthBasedFrameDecoder());
जब इस पद्धति शुरू हो जाती है, वसंत एक नया फ्रेम विकोडक उदाहरण बना सकते हैं और यह वापस आ जाएगी बनाने के लिए निम्नलिखित कोड है।
bean="lengthFieldBasedFrameDecoder"
द्वारा लौटा गया बीन prototype
का दायरा होना चाहिए, क्योंकि यह मेरे ऐप में एक स्टेटस बीन है।
नोट: प्रोटोकॉल डिकोडर्स और एन्कोडर्स के एक निश्चित सेट के साथ कुछ भी नहीं है लेकिन एक साथ बंधे हैं। "जिम्मेदारी की चेन" डिजाइन पैटर्न।
यह लुकअप-विधि स्प्रिंग डॉक द्वारा समझाया गया है: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans। एचटीएमएल # बीन्स-फैक्ट्री-विधि-इंजेक्शन –
मैंने प्रोटोटाइप बीन्स का उपयोग कॉन्फ़िगर किए गए फॉर्म तत्वों (नामों को सत्यापित करने के लिए कॉन्फ़िगर किया गया एक टेक्स्टबॉक्स, उदाहरण के लिए ई-मेल पते) घोषित करने के लिए किया था और मेरे वेबपैप में बनाए जाने वाले हर रूप के लिए उनमें से "जीवित" उदाहरण प्राप्त किए थे। विवरण महत्वपूर्ण नहीं हैं, केवल सिद्धांत है कि मैं इस तरह से संक्षेप में प्रस्तुत होगा:
- एक वर्ग कई config मापदंडों
- आप पूर्वनिर्धारित विन्यास का एक सेट के साथ की घटनाओं को बनाने की जरूरत है कि नहीं है (fancy1 , fancy2, एसटीसी।) कि उदाहरण के रूप में एक्सएमएल
हम मॉडल वर्गों के मामले में प्रोटोटाइप गुंजाइश का उपयोग कर सकते में पहले से कॉन्फ़िगर बनाता कारखाना विधि के एक प्रकार के रूप में applicationContext.getBean("myBeanConfiguredFancy1")
की
फिर प्रोटोटाइप स्कॉप्ड की बजाय स्कॉप्ड का अनुरोध नहीं किया जाना चाहिए? –
किसी ऐसे व्यक्ति के रूप में जो पहले स्प्रिंगसोर्स में काम करता था और इस विषय पर डेवलपर्स से बात करता था। मेरा लेना यहाँ है। प्रोटोटाइप चीजों का परीक्षण करने के लिए बहुत अच्छा है, इसलिए नाम प्रोटोटाइप और क्रिएटिव्यू नहीं है या हर बार जब आप स्प्रिंग कंटेनर से अनुरोध करते हैं तो बीन का एक नया उदाहरण बनाने का कुछ और विवरण।
मैंने पिछले कुछ वर्षों में अपने उपयोग में भी पाया है कि मैं किसी भी अन्य स्थान की बात नहीं कर सकता जहां प्रोटोटाइप किसी वास्तविक दुनिया के उत्पादन अनुप्रयोग में समझ में आता है। यदि आपकी वस्तु राज्य रखती है, तो यह आमतौर पर वसंत बीन नहीं होना चाहिए। मैंने उन सभी अनुप्रयोगों में पाया है जिन पर मैंने काम किया है, सभी बीन्स सेवाएं, रेपॉजिटरीज, और सिंगलटन गैर राज्य होल्डिंग ऑब्जेक्ट्स हैं जहां मुझे लेनदेन, जेपीए, जेएमएस जैसी सुविधाएं जोड़ने की ज़रूरत है और ऐसी पसंद जो हमें एंटरप्राइज़ फीचर्स देती हैं जो पीओजेओ डॉन ' टी है
मेरे सिस्टम में ऑब्जेक्ट्स जो मेरे पास हैं, वे मेरी संस्थाएं हैं और डीटीओ देख सकते हैं, या अन्य चीजें जो स्प्रिंग बीन होने का कोई मतलब नहीं है। तो इसलिए उत्पादन में मेरे अनुप्रयोगों में एक एकल "प्रोटोटाइप" बीन नहीं रहा है।
मैं इस संक्षिप्त प्रश्न को लेकर कोई कोड नहीं देखता हूं, इसे रचनात्मक, बहुत व्यापक नहीं माना गया है।मुझे गलत मत समझो, मुझे लगता है कि यह सवाल बहुत अच्छा है –