Frage

Ich habe eine Handvoll Projekte, die alle ein Projekt für das Datenmodell verwenden.Jedes dieser Projekte verfügt über eine eigene applicationContext.xml-Datei mit einer Reihe sich wiederholender Daten.

Ich hätte gerne eine modelContext.xml-Datei und eine weitere für meine ui.xml usw.

Darf ich das machen?

War es hilfreich?

Lösung

Von dem Federdokumente (v 2.5.5 Abschnitt 3.2.2.1).):

Es kann häufig nützlich sein, Containerdefinitionen in mehrere XML -Dateien aufzuteilen. Eine Möglichkeit, dann einen Anwendungskontext zu laden, der aus all diesen XML -Fragmenten konfiguriert ist, besteht darin, den Kontextkontextkontextor zu verwenden, der mehrere Ressourcenorte benötigt. Bei einer Bean -Fabrik kann ein Bean -Definition -Leser mehrmals verwendet werden, um Definitionen aus jeder Datei nacheinander zu lesen.

Im Allgemeinen bevorzugt das Spring -Team den oben genannten Ansatz, da es Containerkonfigurationsdateien nicht der Tatsache bewusst ist, dass sie mit anderen kombiniert werden. Ein alternativer Ansatz besteht darin, ein oder mehrere Vorkommen des Elements zum Laden von Bean -Definitionen aus einer anderen Datei (oder Dateien) zu verwenden. Schauen wir uns ein Beispiel an:

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

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

In diesem Beispiel werden externe Bean -Definitionen aus 3 Dateien, diensten.xml, messusource.xml und themenource.xml geladen. Alle Standortpfade gelten in Bezug auf die Definitionsdatei, die das Importieren durchführt Speicherort unter dem Speicherort der Importdatei. Wie Sie sehen können, wird ein führender Schrägstrich tatsächlich ignoriert, aber angesichts der Tatsache, dass diese als relative Pfade betrachtet werden, ist es wahrscheinlich eine bessere Form, den Schrägstrich überhaupt nicht zu verwenden. Der Inhalt der importierten Dateien muss gültig sein.

Andere Tipps

Wir tun dies in unseren Projekten bei der Arbeit, indem wir den Ressourcenlader classpath* in Spring verwenden.Für eine bestimmte App werden alle Appcontext-Dateien geladen, die die Anwendungs-ID enthalten:

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

Ja, Sie können dies über das Importelement tun.

<import resource="services.xml"/>

Das Ressourcenattribut jedes Elements ist ein gültiger Pfad (zB ClassPath: foo.xml)

Angesichts dessen, worauf Nicholas mich hingewiesen hat, fand ich das in den Dokumenten. Es ermöglicht mir, die Bean -Kontexte zur Laufzeit auszuwählen, an denen ich interessiert bin.

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

Folgendes habe ich für eines meiner Projekte getan. In deiner web.xml Datei können Sie die Spring -Bean -Dateien definieren, die Ihre Anwendung verwenden soll:

  <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>

Wenn dies nicht in Ihrem definiert ist web.xml, es sucht automatisch nach /WEB-INF/applicationContext.xml

Eine andere Sache zu beachten ist, dass Sie, obwohl Sie dies tun können. Wenn Sie kein großer Fan von XML sind, können Sie im Frühjahr 2,5 mit Anmerkungen viele Dinge tun.

Ja, Sie können das Tag in der "Master" -Bohnendatei verwenden. Aber was ist mit dem Warum? Warum nicht die Dateien im ContextConFigLocation -Kontext -Param des WAB.XML- oder ALS -Standortenarrays der Bean -Fabrik auflisten?

Ich denke, Mutlip -Dateien sind viel einfacher zu handhaben. Sie können nur einige von ihnen für einen Test auswählen, einfach umbenennen oder einen Teil der Anwendung entfernen, und Sie können verschiedene Anwendungen mit denselben Konfigurationsdateien (eine WebApp und eine Befehlszeilenversion mit einigen überlappenden Bean -Definitionen) begrenzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top