वसंत - विन्यास पर भ्रम?


9

कहीं मैंने पढ़ा कि वसंत विन्यास पर सुविधा प्रदान करता है। लेकिन वसंत लोग विन्यास पर इतने बदलाव ला रहे हैं, कि मैं अब xml कॉन्फ़िगरेशन या एनोटेशन का उपयोग करने में वास्तव में भ्रमित हो रहा हूं।

मैं किसी को भी एक निश्चित पद्धति या एक्सएमएल और एनोटेशन का उपयोग करने में अंगूठे के नियम का सुझाव देना चाहूंगा।


एसओ के उदाहरणों से पता चलता है कि मेरे जैसे कई शुरुआती कॉन्फ़िगरेशन पर भ्रमित हो रहे हैं।

  • लिंक -1

    मैं कार्यक्षमता के पीछे समझ नहीं है <context:annotation-config>और <context:component-scan>

    मैंने जो पढ़ा है, वे विभिन्न एनोटेशन (@Required, @Autowired आदि बनाम @Component, @Repository, @Service इत्यादि) को संभालने के लिए प्रतीत होते हैं, लेकिन मैंने जो पढ़ा है, उसी सेम पोस्ट प्रोसेसर क्लासेस को रजिस्टर करने से भी।

    मुझे और भी भ्रमित करने के लिए, इस पर एक annotation-configविशेषता है <context:component-scan>...

  • लिंक 2

    मेरे पास अभी भी घटक स्कैन टैग है:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />

    लेकिन मेरे पास एक और टैग भी है (जैसे दिखने में समान कार्य होता है), यह एक:

    <annotation-driven />

    इन दो टैग में क्या अंतर है? एक अन्य "अजीब" बात यह है कि पिछला उदाहरण (जो एनोटेशन-संचालित टैग का उपयोग नहीं करता है) एसटीएस द्वारा स्प्रिंग एमवीसी टेम्पलेट प्रोजेक्ट का उपयोग करके बनाई गई परियोजना के समान है, लेकिन अगर मैं इसके कॉन्फ़िगरेशन से एनोटेशन-संचालित टैग को हटा देता हूं प्रोजेक्ट फ़ाइल न चलाएं और मुझे निम्न त्रुटि दें: HTTP स्थिति 404 - ...

स्प्रिंग 3.2 को अब समीपस्थ होने के लिए cglib की आवश्यकता नहीं है, लेकिन निचले संस्करण cglib का उपयोग करते हैं। स्प्रिंग्ससोर्स ब्लॉग का एक उद्धरण

इस तरह के परदे के पीछे उत्पन्न करने के लिए, स्प्रिंग थर्ड पार्टी लाइब्रेरी का उपयोग करता है जिसे कल्लिब कहा जाता है। दुर्भाग्य से, यह परियोजना अब सक्रिय नहीं है। स्प्रिंग 3.2 में, यह बहुत संभावना है कि स्प्रिंग डिफ़ॉल्ट रूप से Javassist का उपयोग कर रहा होगा।

क्या ये सुझाव देने के लिए पर्याप्त हैं कि वसंत विन्यास पर भ्रम है?


1
"वसंत लोग विन्यास पर बहुत अधिक बदलाव ला रहे हैं" - क्या आप कृपया एक उदाहरण दे सकते हैं? इससे पाठकों को आपकी समस्या को बेहतर ढंग से समझने और आपके सवाल का जवाब देने में मदद मिलेगी
gnat

9
सवाल यह अच्छा नहीं है, लेकिन यकीन है कि शीर्षक अजीब है।
फ्लोरियन मार्गाइन

1
@ खुद को वसंत सिखाने की प्रक्रिया में, मैं चारों ओर घूमता रहा और कई अलग-अलग तरीकों से व्यक्त की गई समान चीजों के पार आया। वसंत प्रलेखन चीजों को करने का एक तरीका कहता है, कुछ ट्यूटोरियल अभी तक एक और तरीका कहते हैं, दोनों सही हैं, सीखने की अवस्था इतनी अधिक है। केवल सवाल है .. क्या कोई स्पष्ट दस्तावेज है जो किसी एक चीज को करने के सभी संभावित तरीकों को दर्शाता है वसंत ऋतु में ?

1
@tito प्रश्न के रूप में आप इसे टिप्पणी में कहते हैं, "कोई प्रलेखन है", एक संसाधन अनुरोध की तरह लगता है। प्रोग्रामर्स में रिसोर्स रिक्वेस्ट का बहुत स्वागत नहीं है । जहाँ तक मैं समझता हूँ, एक बजाय एक अंतर्निहित समस्या पेश करेगा (जहाँ तक मैं देख सकता हूँ, आपने प्रश्न पाठ में, "उपयोग करने के लिए भ्रमित हो रहा है") - एक समस्या जिसे विशेष संसाधन के साथ हल करने का इरादा था
gnat

2
@ मुझे लगता है कि आपकी समस्या नए प्रलेखन के साथ पुराने ट्यूटोरियल को मिला रही है। वसंत बहुत "विन्यास पर सम्मेलन" बन गया है, जहां आपको पहले जितना व्यक्त करने की आवश्यकता नहीं है। हालांकि, पुराने ट्यूटोरियल (विशेष रूप से प्री-3.1) बहुत सारा सामान अब अनावश्यक करते हैं।
मात्सेमन

जवाबों:


5

स्प्रिंग का लक्ष्य आपको एक ढांचा प्रदान करना है, जहां "कॉन्फ़िगरेशन पर कन्वेंशन" है। हालांकि वास्तविकता यह है कि स्प्रिंग एप्लिकेशन को निश्चित मात्रा में कॉन्फ़िगरेशन की आवश्यकता होती है।

स्प्रिंग 2.5.x और पिछले संस्करणों में, सामान्य मुहावरे को XML के माध्यम से यह कॉन्फ़िगरेशन प्रदान करना था। स्प्रिंग 3.0+ के साथ, मुहावरेदार तरीका एनोटेशन (कुछ ऐसा है जो जावा ईई 6/7 भी प्रोत्साहित करता है) का उपयोग करना है।

एक साइड नोट के रूप में, यह एनोटेट JPA इकाई को देखने के लिए मनोरंजक (दुखद) हो सकता है, किसी एकल फ़ील्ड में 4+ एनोटेशन जोड़ना आसान है ...।


मेरे जैसे छोटे समय के विकासकर्ता के लिए विन्यास के स्तर को समझ से परे हो गया है, जिन्हें एक परियोजना को प्राप्त करने के लिए एन संख्या के चौखटे के साथ चारों ओर घूमना पड़ता है।

1
मुझे दस एनोटेशन के तरीके मिले हैं, जिनमें से प्रत्येक एक अलग उपयोगी चीज करता है ...
डोनल फैलो

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

2
मुझे नहीं लगता कि 4 घोषणाएँ आपको दुखी क्यों करती हैं, समतुल्य xml फ़ाइल कैसी दिखती है?
निमचिम्प्स्की

ओह, एक्सएमएल बहुत दूर होगा, :-)
मार्टिज़न वर्बर्ग

0
<annotation-driven />

आपको XML स्कीमा निर्दिष्ट करना होगा जहां से यह आता है।

जेपीए ट्रांजेक्शन हैंडलिंग रणनीति के संदर्भ में इसकी संभावना सबसे अधिक है जब लेन-देन प्रबंधक को परिभाषित करते हैं ( 9.5.6 देखें स्प्रिंग के डॉक्स में @ ट्रांसट्रैशनल का उपयोग करके )

जब आप एनोटेशन-चालित लेन-देन से निपटने को परिभाषित करते हैं - स्प्रिंग एओपी स्वचालित रूप से विधि के चालान से पहले लेनदेन (या मौजूदा के लिए जांच) के लिए आपकी विधि के लिए पहलू बनाता है और फिर विधि समाप्ति के बाद (अपवाद के मामले में रोलबैक) के लिए प्रतिबद्ध है।


0

मैंने पाया है कि जब आप एक सिंगलटन कार्यान्वयन करते हैं तो IoC / बीन निर्माण पर आधारित एनोटेशन आसान होता है, लेकिन इसे स्वैप करने की आवश्यकता हो सकती है।

ऐसी स्थिति के विपरीत जहां आपको विभिन्न आश्रित वर्गों / उदाहरणों के साथ बार-बार बीन का पुन: उपयोग करने की आवश्यकता हो सकती है।

उन मामलों में मैं बीन को कॉन्फिगर करता हूं और आमतौर पर मुझे जिस भी निर्भरता की जरूरत होती है उसका कंस्ट्रक्टर इंजेक्शन करता है। फिर, उस वर्ग में जो बीन (ओं) का उपयोग करेगा I @Autowireऔर फिर @Qualifier("")- यही कारण है कि कारखानों को काम करने के लिए माना जाता है ।

एक सिंगलटन एक कारखाना विधि है जो केवल 1 परिणाम देता है। जब यह आसानी से लागू नहीं होता है, तो आपको इसे मिश्रण करने की आवश्यकता होती है।

घटक-स्कैन बनाम नहीं का उपयोग करने के लिए यह वास्तव में उपरोक्त मानदंडों और अच्छे निर्णय के अधीन है। मैं आमतौर पर पैकेज घटक-स्कैनिंग के बारे में बहुत स्पष्ट हूं। इस तरह मैं परीक्षण के लिए एक अलग अनुप्रयोग संदर्भ बना सकता हूं जहां मैं अपने IoC सेटअप के बाकी परीक्षण करते समय बाहरी निर्भरता (जैसे db) का मजाक उड़ा सकता हूं।

इसके अलावा, मुझे @Componentअपनी परियोजना में कोई भी पुस्तकालय कोड नहीं है । आप कभी नहीं जानते हैं कि कब और कैसे आपको वहां सेम का उपयोग करने की आवश्यकता होगी और यदि आप @Componentइसे लेते हैं, तो आप गलती से इसे एक स्कैन में ले सकते हैं और आप इसे पुन: प्रयोज्य तक सीमित कर सकते हैं। इन मामलों के लिए मेरे पास आम तौर पर कुछ आसान बीन घोषणा घोषणाओं के साथ पुस्तकालय में परिभाषित एक आवेदन संदर्भ है जो कि मेरा मुख्य प्रोजेक्ट है, इसमें आयात के साथ आवेदन का संदर्भ भी शामिल हो सकता है।

यहां कोई धर्म नहीं। बस पास होने का अनुभव है


0

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

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