2009-08-26 14 views
6

हमें मूल रूप से स्टार्ट-अप समय पर व्यवहार को समायोजित करने में सक्षम होना चाहिए, हमारे आवेदन के अंदर विभिन्न कारखानों द्वारा उत्पादित वांछित कक्षाएं प्रदान करके ("नए" ऑपरेटर की कठोर बाध्यकारी से बचने के लिए)।क्या स्टैंड स्टैंड अकेले कार्यक्रम में निर्भरता इंजेक्शन की अनुमति देने के लिए एक साधारण ढांचा है?

मुझे पता है कि यह कई बड़े ढांचे द्वारा प्रदान किया जाता है, लेकिन मैं बिना किसी विशाल जावा एप्लिकेशन द्वारा आसानी से उपयोग किया जा रहा था।

कोई सुझाव?


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


संपादित करें: अब हम उस बिंदु पर पहुंच गए हैं जहां हमें वास्तव में निर्णय लेने की आवश्यकता है। आवेदन शायद दशकों तक जीवित रहेगा, इसलिए हमें एक ढांचे के साथ एक उलटा निर्णय लेने की जरूरत है जिसे उम्मीद के लिए लंबे समय तक बनाए रखा जाएगा। मुझे वास्तव में गुइस के साथ उपलब्ध स्थिर प्रकार की जांच पसंद है, लेकिन यह नहीं कि एनोटेशन वसंत में बाहरी होने की बजाय गुइस को स्पष्ट रूप से बांधते हैं। मुझे यह भी पसंद है कि वसंत के विपरीत गुइस का उपयोग करते समय यह कोड अधिक संक्षिप्त प्रतीत होता है। हमें कुछ ऐसी चीज चाहिए जो मजबूत और सहायक हो। हमें इस समय सिर्फ डीआई से ज्यादा की आवश्यकता नहीं है। क्या कोई ऐसा उपयोग मामला है जो निश्चित कहता है कि इनमें से किसी एक के लिए जाना है?


संपादित 2011-07-27: अंतिम निर्णय कोड में JSR-330 एपीआई का उपयोग करने, और एक प्रति परियोजना के आधार पर चुनते हैं स्प्रिंग, Guice या वेल्ड उपयोग करने के लिए किया गया था। स्टैंडअलोन अनुप्रयोगों के लिए जीआईएस-330 कार्यान्वयन के रूप में अब तक गुइस ने अच्छी तरह से काम किया है।

उत्तर

5

क्या आपने Google Guice ढांचे पर देखा है? यह बहुत हल्के और एनोटेशन आधारित है, XML विन्यास फाइल

वहाँ भी है Pico- and Nano-container (codehaus से) जो काफी हल्के होते हैं, हालांकि पिछली बार मैंने देखा (वैसे कुछ साल पहले) प्रलेखन का अभाव था परहेज।

मुझे यह कहना होगा कि मैं दूसरों के साथ सहमत हूं कि मुझे लगता है कि वसंत भारी और भ्रमित है। यह वास्तव में एक बहुत ही सरल आईओसी कंटेनर है और इसकी सिफारिश की जानी चाहिए।

+0

मैं अपने क्लाइंट अनुप्रयोग तारों के लिए वसंत का उपयोग करें। – pjp

+0

हमने अभी के लिए गुइस के लिए निर्णय लिया है, और फिर इसके एक से अधिक कार्यान्वयन होने पर जेएसआर-330 में माइग्रेट करें। –

2

रहे हैं एक जोड़े को मैं तुम्हारे बारे में पता उपयोगी लग सकते:

मैं इसे के रूप में स्टैंडअलोन क्षुधा में बहुत उपयोगी प्लेक्सस पाया है सीएलआई बातचीत के लिए वैकल्पिक उपयोगिता घटक है।

+0

picocontainer – flybywire

7

आप हमेशा स्प्रिंग फ्रेमवर्क 2.5 का उपयोग कर सकते हैं। यह एक बड़ा है, लेकिन यदि आप केवल डीआई का उपयोग करने की योजना बना रहे हैं तो आप वसंत-कोर और वसंत-बीन्स मॉड्यूल का उपयोग कर सकते हैं, जो बहुत छोटे हैं (सीए 500 केबी और 300 केबी)।

Google Guice 2.0 भी है जो केवल मूल सामग्री (कोई एओपी) वाले पैकेज के साथ आता है और यह 430 केबी है।

+2

के लिए +1 मुझे लगता है कि आपको वसंत-संदर्भ की भी आवश्यकता है। और कॉमन्स लॉगिंग? –

1

"विशाल" से मुझे लगता है कि आप वसंत का जिक्र कर रहे हैं, लेकिन यह अनुचित है, क्योंकि आप स्प्रिंग के बिट्स को चुन सकते हैं जिसे आप उपयोग करना चाहते हैं। यदि आपको केवल आईओसी कंटेनर चाहिए, तो उचित जेएआर फाइलों और एपीआई के उपयुक्त बिट का उपयोग करें, और बाकी के बाकी हिस्सों को अनदेखा करें।

+0

हालांकि 'चेरी' काफी हेवीवेट चेरी हो सकती है। स्प्रिंग पर स्विच करके 664 के का एक स्प्रिंग एमई एप्लीकेशन 1.9 एम का आवेदन बन गया। वसंत कोर, सेम और संदर्भ राशि 1.2 एम तक। यह मूल रूप से जितना छोटा हो जाता है। –

1

अधिकतर उत्तर अब तक जार फ़ाइलों के आकार से संबंधित प्रतीत होते हैं।

हालांकि मुझे लगता है कि परियोजना पर अधिक महत्वपूर्ण सवाल यह है कि कितने कोड फ्रेम लाइनों का उपयोग करने के लिए जोड़ा/बदला जाना चाहिए?

यहां तक ​​कि "बड़ी" वसंत ढांचे वास्तव में बहुत उपयोग करने के लिए आसान है:

आप मूल रूप से की जरूरत है:

  • एक xml फ़ाइल है कि अपने कारखानों का वर्णन है। कोड की
  • एक पंक्ति xml फ़ाइल लोड हो रहा है

अच्छी बात यह है कि वसंत गैर दखल है द्वारा कंटेनर प्रारंभ करने में। तो आपको विशिष्ट इंटरफेस को लागू करने या अपनी कक्षाओं में कोई विशिष्ट एनोटेशन या आयात जोड़ने की आवश्यकता नहीं है।

पर सर्वश्रेष्ठ एकल स्थान जहां आप वास्तव में वसंत कंटेनर प्रारंभ आपके आवेदन वसंत वर्गों के लिए एक वास्तविक निर्भरता है कि में केवल जगह है।

0

Spring के साथ क्या गलत है?

इन दिनों यह बहुत अच्छी तरह से पैक किया गया है, इसलिए आपको पूरी किट और कैबूडल लेने की आवश्यकता नहीं होगी।

एक तरफ, मैं एनोटेशन आधारित इंजेक्शन ढांचे का प्रशंसक नहीं हूं। ऐसा इसलिए है क्योंकि एनोटेशन उदाहरण के बजाए कक्षा के लिए बाध्य हैं, बाद में डी के लिए पूर्व-आवश्यकता, imho, होना चाहिए। इसका मतलब है कि किसी दिए गए वर्ग के प्रत्येक उदाहरण को एक ही ऑब्जेक्ट इंजेक्शन दिया जाता है, जो बिंदु को हराने के लिए प्रतीत होता है।

यह भी मान लें कि DI को ढांचे की भी आवश्यकता नहीं है, आवेदन के साथ आपके मुख्य विधि तारों में क्या गलत है?

+0

यदि आप एनोटेशन आधारित इंजेक्शन के प्रशंसक नहीं हैं, तो स्प्रिंग एमई कमाल है। (यह इसका समर्थन नहीं करता है .-) यह हालांकि हो सकता है, लेकिन यह नहीं करता है।) –

0

यदि आप कुछ सरल और उचित चाहते हैं, तो कुछ कोड लिखें जो आप करना चाहते हैं। संभवतः इसमें निश्चित रूप से निश्चित तर्क पर आंशिक रूप से आधारित कारखानों और आंशिक रूप से रन-टाइम सेटिंग्स पर वायरिंग शामिल है।

यह लाभ है कि संभावित रन-टाइम कॉन्फ़िगरेशन का सेट ज्ञात है, और इसलिए दस्तावेज योग्य और टेस्टेबल।

इसका नुकसान यह है कि एक अप्रत्याशित तर्क परिवर्तन को तैनात करने के लिए एक दूसरे को या तो संकलन समय का एक अतिरिक्त दूसरा या इतना समय लगता है, और (अधिक महत्वपूर्ण) इसे पूर्ण परीक्षण के बिना उत्पादन में घुसपैठ नहीं किया जा सकता है क्योंकि यह केवल एक विन्यास परिवर्तन है '।

1

मैं दृढ़ता से Spring ME पर एक नज़र डालने का सुझाव दूंगा। हालांकि मूल रूप से जावा एमई अनुप्रयोगों पर वसंत का उपयोग करने का एक तरीका होने का मतलब है, यह स्टैंडअलोन अनुप्रयोगों के लिए भी ठीक काम करता है।

सच है, यह आपको स्प्रिंग (पूर्ण) की पेशकश करने वाली सभी घंटियां और सीटी नहीं देता है, लेकिन फिर, पूर्ण वसंत एक साधारण निर्भरता इंजेक्शन ढांचे से कहीं अधिक है।

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

0

लगभग एक साल पहले मैंने खुद को इस तरह एक प्रश्न पूछा। तो मैं वसंत और गुइस दस्तावेज पढ़ने में कुछ घंटे बिताता हूं। स्प्रिंग के साथ लगभग एक घंटे बाद मुझे लगा कि मुझे एक मूल वेब ऐप जा रहा था, लेकिन मुझे पता नहीं था कि अकेले स्टैंड स्टैंड में इसका उपयोग कैसे किया जाए। गुइस दस्तावेज़ के साथ एक घंटे बाद सब कुछ क्लिक किया गया था और मैं देख सकता था कि मैं जो करना चाहता हूं वह मैं कैसे करना चाहता हूं। अब गुइस की सिफारिश करने के लिए? नहीं। आपकी टीम पहले से क्या जानती है? अगर कोई पहले से ही जानता है कि वसंत लीवर ज्ञान है और उन्हें इसके बारे में फैला है। गुइस या पिको के साथ बुद्धिमान की तरह।

+0

हम सभी इस समय बहुत खाली हैं, इसलिए अनुभवों के बारे में सवाल: डी –

0

यदि आप वास्तव में हल्के वजन चाहते हैं तो आप fuse पर एक नज़र रखना चाहते हैं, यह काफी विस्तार योग्य है, इसलिए आप जो भी खोज रहे हैं वह हो सकता है।

चियर्स

एन

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