هل يمكنني إنشاء ملف تكوين الربيع من ملفات أصغر؟

StackOverflow https://stackoverflow.com/questions/94542

  •  01-07-2019
  •  | 
  •  

سؤال

لدي عدد قليل من المشاريع التي تستخدم جميعها مشروعًا واحدًا لنموذج البيانات.يحتوي كل مشروع من هذه المشاريع على ملف applicationContext.xml الخاص به والذي يحتوي على مجموعة من عناصر البيانات المتكررة بداخله.

أرغب في الحصول على ملف modelContext.xml وملف آخر لـ ui.xml الخاص بي، وما إلى ذلك.

هل يمكنني فعل هذا؟

هل كانت مفيدة؟

المحلول

من مستندات الربيع (الإصدار 2.5.5 القسم 3.2.2.1.):

قد يكون من المفيد غالبًا تقسيم تعريفات الحاوية إلى ملفات 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 ، و sumesource.xml.تعتبر جميع مسارات الموقع نسبة إلى ملف التعريف الذي يقوم بالاستيراد ، لذلك يجب أن تكون الخدمات. الموقع أسفل موقع الملف المستورد.كما ترون ، يتم بالفعل تجاهل القطع المائلة الرائدة ، ولكن بالنظر إلى أن هذه المسارات النسبية ، فمن الأفضل أن يكون من الأفضل عدم استخدام القطع المائلة على الإطلاق.يجب أن تكون محتويات الملفات التي يتم استيرادها صالحة ملفات تعريف XML Bean وفقًا لمخطط الربيع أو DTD ، بما في ذلك العنصر الأعلى للمستوى.

نصائح أخرى

نقوم بذلك في مشاريعنا في العمل، باستخدام مُحمل الموارد classpath* في Spring.بالنسبة لتطبيق معين، سيتم تحميل جميع ملفات سياق التطبيق التي تحتوي على معرف التطبيق:

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

نعم، يمكنك القيام بذلك عن طريق عنصر الاستيراد.

<import resource="services.xml"/>

تعد سمة المورد الخاصة بكل عنصر مسارًا صالحًا (على سبيل المثال:مسار الفئة:foo.xml)

بالنظر إلى ما أشار لي نيكولاس إليه، فقد وجدت هذا في المستندات.يسمح لي باختيار سياقات الفول التي أهتم بها في وقت التشغيل.

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

إليك ما قمت به في أحد مشاريعي.في الخاص بك web.xml الملف، يمكنك تحديد ملفات Spring Bean التي تريد أن يستخدمها تطبيقك:

  <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.xml, ، فإنه يبحث تلقائيًا عن /WEB-INF/applicationContext.xml

شيء آخر يجب ملاحظته هو أنه على الرغم من أنه يمكنك القيام بذلك، إذا لم تكن من كبار المعجبين بـ XML، فيمكنك القيام بالكثير من الأشياء في Spring 2.5 باستخدام التعليقات التوضيحية.

نعم، يمكنك استخدام العلامة الموجودة داخل ملف الفول "Master".ولكن ماذا عن السبب؟لماذا لا يتم إدراج الملفات في معلمة السياق contextConfigLocation الخاصة بمصفوفة wab.xml أو مواقع als الخاصة بمصنع الفول؟

أعتقد أن التعامل مع الملفات المتعددة أسهل بكثير.يمكنك اختيار بعضها فقط للاختبار، ما عليك سوى إضافة إعادة تسمية أو إزالة جزء من التطبيق ويمكنك ربط تطبيقات مختلفة بنفس ملفات التكوين (تطبيق ويب وإصدار سطر أوامر مع بعض تعريفات الفول المتداخلة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top