2008-09-18 17 views
15

मेरे पास कुछ हद तक प्रोजेक्ट हैं जो सभी डेटा मॉडल के लिए एक प्रोजेक्ट का उपयोग करते हैं। इन परियोजनाओं में से प्रत्येक का अपना एप्लीकेशन Context.xml फ़ाइल है जिसमें इसके दोहराव वाले डेटा सामानों का समूह है।क्या मैं छोटे से स्प्रिंग कॉन्फ़िगरेशन फ़ाइल लिख सकता हूं?

मैं एक modelContext.xml फ़ाइल और एक अन्य मेरी ui.xml के लिए करना चाहते हैं, आदि

मैं यह कर सकते हैं?

उत्तर

19

Spring Docs (v 2.5.5 Section 3.2.2.1.) से:

यह अक्सर कई में कंटेनर परिभाषाओं को विभाजित करने के लिए उपयोगी हो सकता

<import resource="services.xml"/> 

प्रत्येक तत्व के संसाधन विशेषता एक मान्य पथ है एक्सएमएल फाइलें। एप्लिकेशन संदर्भ को लोड करने का एक तरीका जो इन सभी XML खंडों से कॉन्फ़िगर किया गया है, संदर्भ कन्स्ट्रक्टर का उपयोग करना है जो एकाधिक संसाधन स्थान लेता है। बीन फैक्ट्री के साथ, एक बीन परिभाषा पाठक को प्रत्येक फ़ाइल से परिभाषाओं को पढ़ने के लिए कई बार उपयोग किया जा सकता है।

आम तौर पर, स्प्रिंग टीम दृष्टिकोण से ऊपर पसंद करती हैं, क्योंकि यह कंटेनर विन्यास फाइल तथ्य है कि वे दूसरों के साथ संयुक्त किया जा रहा है के बारे में पता रहता है। एक वैकल्पिक दृष्टिकोण तत्व की घटनाओं को फ़ाइल (या फ़ाइलों) से बीन परिभाषाओं को लोड करने के लिए एक या अधिक घटनाओं का उपयोग करना है।

<import resource="services.xml"/> 
<import resource="resources/messageSource.xml"/> 
<import resource="/resources/themeSource.xml"/> 

<bean id="bean1" class="..."/> 
<bean id="bean2" class="..."/> 

इस उदाहरण में, बाहरी सेम परिभाषाएँ 3 फ़ाइलें, services.xml, messageSource.xml, और themeSource से लोड किया जा रहा है: चलो एक नमूना पर नजर डालते हैं .xml। सभी स्थान रास्तों आयात कर परिभाषा फ़ाइल के सापेक्ष माना जाता है, इसलिए इस मामले में services.xml एक ही निर्देशिका या आयात कर रही फ़ाइल के रूप में classpath स्थान में होना चाहिए, जबकि messageSource.xml और themeSource .xml फ़ाइल आयात करने के स्थान के नीचे स्थित संसाधनों में होना चाहिए। जैसा कि आप देख सकते हैं, अग्रणी स्लैश वास्तव में अनदेखा किया जाता है, लेकिन दिया जाता है कि इन्हें सापेक्ष पथ माना जाता है, यह शायद फ़ॉर्म स्लैश का उपयोग न करने के लिए बेहतर है। आयात किए जा रहे फ़ाइलों की सामग्री स्प्रिंग स्कीमा या डीटीडी के अनुसार शीर्ष XML तत्व सहित मान्य XML बीन परिभाषा फ़ाइलें होनी चाहिए।

+0

वसंत दस्तावेज़ों से बिल्कुल सहमत हैं: कॉन्फ़िगरेशन फ़ाइलों का एकत्रीकरण हर बार स्पष्ट आयात को धड़कता है। यदि यूनिट परीक्षण के अलावा कुछ भी नहीं है। –

2

हां, आप आयात तत्व के माध्यम से ऐसा कर सकते हैं। (: Foo.xml जैसे classpath)

3

हम स्प्रिंग में क्लासपाथ * संसाधन लोडर का उपयोग करके, काम पर हमारी परियोजनाओं में ऐसा करते हैं। किसी निश्चित ऐप के लिए, सभी appcontext आवेदन आईडी युक्त फ़ाइलों लोड किया जाएगा:

classpath*:springconfig/spring-appname-*.xml 
+0

मैं उलझन में हूँ। नया क्लासपाथ रिसोर्स ("क्लासपाथ *: springconfig/spring-appname - *। xml") क्या आप प्रस्तावित कर रहे हैं? –

+1

असहमत होना है। हम इस दृष्टिकोण के साथ काम करते थे, और यह हमेशा गलत कॉन्फ़िगरेशन फ़ाइल लोड करने की ओर जाता है। हमारे मामले में, हमारे पास वसंत एक्सएमएल फाइलें एक विशेष "conf" फ़ोल्डर में थीं, लेकिन जाहिर है कि वे विभिन्न जारों के अंदर भी छिपा रहे थे। यह दृष्टिकोण क्लासपाथ में कहीं भी से सभी कॉन्फ़िगरेशन फ़ाइलों को लोड करता है, जिन्हें आप मानते हैं उन्हें ओवरराइड करते हैं। – ihadanny

+0

महत्वपूर्ण संदर्भ: "एपनाम" निश्चित रूप से हमारे द्वारा उपयोग किए जा रहे एप्लिकेशन के लिए विशिष्ट है, और विभिन्न वसंत संदर्भ फाइलें मैवेन मॉड्यूल में हैं जहां सबसे विशिष्ट एप्लिकेशन मॉड्यूल अन्य निर्भरताओं को अन्य निर्भरताओं से प्राप्त करता है। साथ ही, फ़ाइल नाम पैटर्न आपको यादृच्छिक फ़ाइलों को चुनने से बचाएगा। –

2

को देखते हुए क्या निकोलस मुझे बताया कि मैं डॉक्स में इस पाया। यह मेरे रनटाइम पर सेम संदर्भों मैं में दिलचस्पी रखता हूँ लेने के लिए अनुमति देता है।

GenericApplicationContext ctx = new GenericApplicationContext(); 
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx); 
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml")); 
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml")); 
ctx.refresh(); 
1

यहाँ मैं अपनी परियोजनाओं में से एक के लिए क्या किया है। अपने web.xml फ़ाइल में, आप वसंत सेम फ़ाइलें आप अपने आवेदन का उपयोग करना चाहते परिभाषित कर सकते हैं यदि यह आपका web.xml में निर्धारित नहीं है

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/applicationContext.xml 
     /WEB-INF/modelContext.xml 
     /WEB-INF/ui.xml 
    </param-value> 
    </context-param> 

, यह स्वतः ही /WEB-INF/applicationContext.xml

+0

मैं स्प्रिंग एमवीसी का उपयोग नहीं कर रहा हूं, केवल आईओसी –

0

नोट करने के लिए एक और बात है के लिए लग रहा है हालांकि आप यह कर सकते हैं, अगर आप एक्सएमएल का बड़ा प्रशंसक नहीं हैं तो आप एनोटेशन के साथ स्प्रिंग 2.5 में बहुत सी चीजें कर सकते हैं।

0

हां, आप "मास्टर" बीन फ़ाइल के अंदर टैग का उपयोग कर सकते हैं। लेकिन क्यों? क्यों संदर्भ में फ़ाइलों को सूचीबद्ध नहीं करना bean कारखाना के wab.xml या als स्थानों सरणी का कॉन्फिग स्थान संदर्भ पैरामीटर?

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