Puis-je composer un fichier de configuration de printemps à partir de fichiers plus petits?

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

  •  01-07-2019
  •  | 
  •  

Question

J'ai une poignée de projets qui utilisent tous un projet pour le modèle de données. Chacun de ces projets a son propre fichier applicationContext.xml contenant un tas de données répétitives.

J'aimerais disposer d'un fichier modelContext.xml et d'un autre pour mon ui.xml, etc.

Puis-je faire cela?

Était-ce utile?

La solution

Extrait de la Spring Docs (v 2.5. 5 Section 3.2.2.1.) :

  

Il peut souvent être utile de se séparer   définitions de conteneurs en plusieurs   Fichiers XML. Une façon de charger ensuite un   contexte d'application qui est   configuré à partir de tous ces XML   fragments est d'utiliser l'application   constructeur de contexte qui prend   plusieurs emplacements de ressources. Avec un   usine de haricot, un lecteur de définition de haricot   peut être utilisé plusieurs fois pour lire   définitions à partir de chaque fichier.

     

En règle générale, l'équipe de Spring préfère le   ci-dessus approche, car il garde   fichiers de configuration de conteneur non conscients   du fait qu'ils sont   combiné avec d'autres. Un remplaçant   approche consiste à utiliser un ou plusieurs   occurrences de l'élément   charger les définitions de beans d'un autre   fichier (ou fichiers). Regardons un   échantillon:

     

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

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

     

Dans cet exemple, bean externe   les définitions sont chargées à partir de 3   fichiers, services.xml,   messageSource.xml, et   themeSource.xml. Tous les chemins de localisation   sont considérés par rapport à la   fichier de définition faisant l'importation,   alors services.xml dans ce cas doit être   dans le même répertoire ou chemin de classe   emplacement en tant que fichier faisant le   importer, pendant que messageSource.xml et   themeSource.xml doit figurer dans une ressource   emplacement en dessous de l'emplacement du   fichier d'importation. Comme vous pouvez le voir, un   la barre oblique est ignorée, mais   étant donné que ceux-ci sont considérés   chemins relatifs, il vaut probablement mieux   forme de ne pas utiliser la barre oblique du tout. le   contenu des fichiers en cours d'importation   doit être une définition de bean XML valide   fichiers selon le schéma de printemps   ou DTD, y compris le niveau supérieur    élément.

Autres conseils

Nous le faisons dans nos projets au travail, en utilisant le chargeur de ressources classpath * de Spring. Pour une application donnée, tous les fichiers appcontext contenant l'identifiant de l'application seront chargés:

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

Oui, vous pouvez le faire via l'élément d'importation.

<import resource="services.xml"/>

L'attribut de ressource de chaque élément est un chemin valide (par exemple, classpath: foo.xml)

Étant donné ce que Nicholas m'a indiqué, j'ai trouvé ceci dans la documentation. Cela me permet de choisir au moment de l'exécution les contextes de haricots qui m'intéressent.

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

Voici ce que j'ai fait pour l'un de mes projets. Dans votre fichier web.xml , vous pouvez définir les fichiers de bean Spring que vous souhaitez que votre application utilise:

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

S'il n'est pas défini dans votre web.xml , il recherche automatiquement /WEB-INF/applicationContext.xml

.

Une autre chose à noter est que bien que vous puissiez le faire, si vous n'êtes pas un grand fan de XML, vous pouvez faire beaucoup de choses dans Spring 2.5 avec des annotations.

Oui, vous pouvez utiliser la balise à l'intérieur du " Maître " fichier de haricot. Mais qu'en est-il du pourquoi? Pourquoi ne pas lister les fichiers dans le paramètre de contexte contextConfigLocation du tableau wab.xml ou als de la fabrique de beans?

Je pense que plusieurs fichiers sont beaucoup plus faciles à manipuler. Vous pouvez choisir uniquement certains d’entre eux pour un test, ajouter simplement renommer ou supprimer une partie de l’application et lier différentes applications avec les mêmes fichiers de configuration (une application Web et une version en ligne de commande avec des définitions de beans superposées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top