जब एक सेम को पलटने के लिए वसंत का उपयोग नहीं करना है?


14

मैं यह समझने की कोशिश कर रहा हूं कि स्प्रिंग का सही उपयोग क्या होगा। वाक्य-रचना की दृष्टि से नहीं, बल्कि अपने उद्देश्य की अवधि में। यदि कोई स्प्रिंग का उपयोग कर रहा है, तो क्या स्प्रिंग कोड को सभी सेम इंस्टेंटेशन कोड को बदलना चाहिए? बीन का उपयोग करने के लिए स्प्रिंग का उपयोग कब या कब नहीं करना है?

हो सकता है निम्नलिखित कोड नमूना आपको मेरी दुविधा को समझने में मदद करेगा:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = new ClassA();
    ca.setName(name);
    caList.add(ca);
}

यदि मैं स्प्रिंग को कॉन्फ़िगर करता हूं तो यह कुछ इस तरह हो जाता है:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A);
    ca.setName(name);
    caList.add(ca);
}

मुझे व्यक्तिगत रूप से लगता है कि स्प्रिंग का उपयोग यहां अनावश्यक ओवरहेड है, क्योंकि

  1. कोड पढ़ने / समझने के लिए सरल है।
  2. यह वास्तव में डिपेंडेंसी इंजेक्शन के लिए एक अच्छी जगह नहीं है क्योंकि मुझे उम्मीद नहीं है कि इसमें कई / विविध कार्यान्वयन होंगे ClassA, कि मैं बाद के समय में स्प्रिंग कॉन्फ़िगरेशन का उपयोग करने की जगह लेने की स्वतंत्रता चाहूंगा।

क्या मैं सही सोच रहा हूँ? यदि नहीं, तो मैं गलत कहाँ जा रहा हूँ?

जवाबों:


14

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


9

मैं परतों के बीच स्प्रिंग (या किसी अन्य DI सिस्टम) का उपयोग करूँगा, परतों के भीतर प्रत्यक्ष तात्कालिकता।
तो एक वर्ग जो एक बीन बनाता है जो उस वर्ग के दायरे को कुछ (कार्यात्मक रूप से) बाहरी प्रणाली में छोड़ देता है, संभवतः उस प्रणाली या कुछ संचार परत द्वारा परिभाषित किया जाता है, जिसे DI के माध्यम से बनाया जाएगा। कोड परत के भीतर आंतरिक उपयोग के लिए विशुद्ध रूप से बनाया गया एक और बीन सीधे कोड स्पष्टता और महत्वपूर्ण प्रणालियों के प्रदर्शन कारणों के रूप में दोनों के लिए बनाया गया है।


यह भी मेरे लिए एक मान्य उत्तर है! अफसोस की बात है, मैं केवल एक उत्तर चुन सकता हूं।
ऋषभ

1

यदि यह एक बीन है , तो आपको स्प्रिंग का निर्माण करने देना चाहिए (सिवाय आप एक फैक्ट्री बीन की आपूर्ति कर सकते हैं - मैंने इसका उपयोग किया है, जहाँ मुझे सिस्टम प्रॉपर्टी पर निर्भर एक विशिष्ट उपवर्ग को वापस करने की आवश्यकता है - और आपको @Configurationऔर @Beanएनोटेशन पर प्रलेखन से परामर्श करना चाहिए। यदि आप ऐसा कर रहे हैं)। यदि यह सेम नहीं है, बल्कि सिर्फ एक प्लेन ओल्ड जावा ऑब्जेक्ट है, तो आपको इसे बनाने के लिए स्प्रिंग का उपयोग करने की कोई आवश्यकता नहीं है। POJO उपयोगी होते हैं, लेकिन उन पर निर्भरता इंजेक्शन, AOP रैपर इत्यादि नहीं मिलेंगे, क्योंकि वे चीजें हैं जो स्प्रिंग आपके लिए जोड़ता है।

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


हाय डोनल, क्या आपका उत्तर वही होगा यदि क्लासए एक डोमेन वर्ग है जो व्यापार तर्क में समृद्ध है?
समीर पाटिल

0

मैं गलत विशेषज्ञ हो सकता है कृपया सही करें।

वसंत के संदर्भ में बीन की पूरी अवधारणा वसंत कंटेनर है जो वस्तु की देखभाल कर रही है। यह जन्म है यह गुंजाइश जीवनचक्र मृत्यु आदि है ... ऐसा लगता है कि यह ऑब्जेक्ट का एक देखभालकर्ता है। जिस एप्लिकेशन को इसकी आवश्यकता है, वह इसे इंजेक्ट करता है।

इसलिए अपने मॉड्यूल के डिजाइन के दौरान एक निर्णय लेते समय हमेशा सोचें कि क्या आप चाहते हैं कि स्प्रिंग फ्रेमवर्क की देखभाल हो या यह एक साधारण वस्तु है जिसका जीवनचक्र एक विधि में संलग्न है।

जैसा कि पहले सुझाव दिया गया था कि डेओ ऑब्जेक्ट्स jms क्वींस ऑब्जेक्ट्स आदि भारी और बेहतर हैं जो कि विशेषज्ञ को छोड़ दिया जाता है, जो इसकी देखभाल करने के लिए स्प्रिंग फ्रेमवर्क है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.