2010-07-20 14 views
117

प्रलेखित here यह कहा गयास्प्रिंग classpath उपसर्ग अंतर

इस विशेष उपसर्ग निर्दिष्ट करता है कि सभी classpath संसाधनों से मेल खाने वाले दिए गए नाम के प्राप्त किया जाना चाहिए (आंतरिक रूप से, यह अनिवार्य रूप से होता है एक ClassLoader.getResources के माध्यम से (। ..) कॉल), और फिर अंतिम अनुप्रयोग संदर्भ परिभाषा बनाने के लिए विलय कर दिया गया।

क्या कोई इसे समझा सकता है?

तारों के बिना classpath:conf/appContext.xml के विपरीत classpath*:conf/appContext.xml का उपयोग करने के बीच क्या अंतर है।

उत्तर

168

सरल परिभाषा

classpath*:conf/appContext.xml का अर्थ है कि सभी appContext.xml फ़ाइलें अपने सभी जार classpath उठाया जाएगा पर और एक बड़ा आवेदन संदर्भ में शामिल हो गए फ़ोल्डरोंconf के तहत।

इसके विपरीत, classpath:conf/appContext.xmlलोड करेगा केवल एक ऐसी फ़ाइल ... आपके क्लासपाथ पर पहली बार मिलेगा।

+6

उनके बीच एक और दिलचस्प अंतर है। मेरा प्रश्न भी देखें: http: // stackoverflow।कॉम/प्रश्न/16 9 85770/रनविड्थ-और-कॉन्फ़िगर कॉन्फ़िगरेशन-अजीब-व्यवहार – Eugene

+17

एक बहुत ही महत्वपूर्ण बात - यदि आप * और स्प्रिंग का उपयोग करते हैं तो कोई मिलान नहीं मिलता है, यह शिकायत नहीं करेगा। यदि आप * का उपयोग नहीं करते हैं और कोई मिलान नहीं है, तो संदर्भ शुरू नहीं होगा (!) –

37

classpath*:... वाक्यविन्यास मुख्य रूप से उपयोगी होता है जब आप वाइल्डकार्ड वाक्यविन्यास का उपयोग करके एकाधिक बीन परिभाषा फ़ाइलों से अनुप्रयोग संदर्भ बनाना चाहते हैं।

उदाहरण के लिए, यदि आप classpath*:appContext.xml का उपयोग करके अपना संदर्भ बनाते हैं, तो क्लासपाथ को क्लासपाथ में appContext.xml नामक प्रत्येक संसाधन के लिए स्कैन किया जाएगा, और उनमें से सभी की बीन परिभाषा एक संदर्भ में विलय हो जाएगी।

इसके विपरीत, classpath:conf/appContext.xml क्लासपाथ से appContext.xml नामक एक और एक फ़ाइल प्राप्त करेगा। यदि एक से अधिक हैं, तो दूसरों को अनदेखा कर दिया जाएगा।

+1

क्या क्लासपाथ * उपनिर्देशिका में भी देखेंगे? दूसरे शब्दों में, यदि मेरे पास classpath रूट में appContext.xml है और एक /dir/appContext.xml में है, तो क्या मैं क्लासपाथ *: appContext.xml का उपयोग करते समय दोनों लोड करूँगा? – AHungerArtist

17

classpath *: यह संसाधनों और भार का एक सूची को संदर्भित करता है सब ऐसे classpath और सूची में मौजूद फ़ाइलों खाली हो सकता है और अगर ऐसी कोई फाइल नहीं classpath तो आवेदन में मौजूद है कोई अपवाद नहीं फेंकता (केवल त्रुटि को अनदेखा करता है)।

classpath: यह एक कुछ संसाधन और भार केवल पहले classpath और पर पाया फ़ाइल को संदर्भित करता है, तो ऐसी कोई फाइल नहीं classpath में मौजूद है यह एक अपवाद

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist 
फेंक होगा
संबंधित मुद्दे