45 votes

Comment référencer un bean d'un autre fichier xml dans Spring ?

J'ai un bean Spring défini dans un fichier xml. Je veux le référencer à partir d'un autre fichier xml. Comment puis-je m'y prendre ?

59voto

tolitius Points 9816

Vous avez plusieurs options :

Importation

<import resource="classpath:config/spring/that-other-xml-conf.xml"/>

<bean id="yourCoolBean" class="org.jdong.MyCoolBean">
    <property name="anotherBean" ref="thatOtherBean"/>
</bean>

Inclure dans le ApplicationContext Construction

Faites en sorte que les deux fichiers fassent partie de votre ApplicationContext lorsque vous le créez => alors aucune importation n'est nécessaire.

Par exemple, si vous en avez besoin pendant les tests :

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:META-INF/conf/spring/this-xml-conf.xml",
                    "classpath:META-INF/conf/spring/that-other-xml-conf.xml" })
public class CleverMoneyMakingBusinessServiceIntegrationTest {...}

S'il s'agit d'une application web, vous le ferez dans web.xml :

<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/conf/spring/this-xml-conf.xml</param-value>
    <param-value>WEB-INF/conf/spring/that-other-xml-conf.xml</param-value>
</context-param>

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

S'il s'agit d'une application indépendante, d'une bibliothèque, etc. ApplicationContext comme :

new ClassPathXmlApplicationContext( 
    new String[] { "classpath:META-INF/conf/spring/this-xml-conf.xml",
                   "classpath:META-INF/conf/spring/that-other-xml-conf.xml" } );

7voto

Xavi López Points 14801

Il suffit d'importer le fichier xml définissant le bean avec <import resource="otherXml.xml"> et vous serez en mesure d'utiliser la définition du haricot.

Vous pouvez utiliser classpath: dans le resource attribut :

<import resource="classpath:anotherXXML.xml" />

Voir la section "3.18. Importer des définitions de bean d'un fichier vers un autre" en ce chapitre de la référence Spring

5voto

JB Nizet Points 250258

Vous le référencez exactement comme vous le feriez pour un bean dans le même fichier XML. Si un contexte Spring est composé de plusieurs fichiers XML, tous les beans font partie du même contexte et partagent donc un espace de nom unique.

3voto

Tom Chamberlain Points 2063

Ou si vous refactorez simplement les beans dans plusieurs fichiers pour éviter que le fichier xml unique ne devienne trop volumineux, il suffit de le référencer dans son dossier actuel :

<import resource="processors/processor-beans.xml"/>

1voto

Program-Me-Rev Points 2116

Vous pouvez également procéder en chargeant plusieurs fichiers de configuration de Spring bean dans le code :

ApplicationContext context = new ClassPathXmlApplicationContext(
    new String[] {"Spring-Common.xml", "Spring-Connection.xml","Spring-ModuleA.xml"});

Placez tous les fichiers xml de Spring dans le classpath du projet :

project-classpath/Spring-Common.xml
project-classpath/Spring-Connection.xml
project-classpath/Spring-ModuleA.xml

Cependant, l'implémentation ci-dessus est un manque d'organisation et est sujette à des erreurs, la meilleure façon est d'organiser tous vos fichiers de configuration de Spring Bean dans un seul fichier XML. Par exemple, créez un fichier Spring-All-Module.xml et importez l'ensemble des fichiers Spring bean comme ceci :

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <import resource="common/Spring-Common.xml"/>
    <import resource="connection/Spring-Connection.xml"/>
    <import resource="moduleA/Spring-ModuleA.xml"/>

</beans>

Vous pouvez maintenant charger un seul fichier xml comme ceci :

ApplicationContext context = 
    new ClassPathXmlApplicationContext(Spring-All-Module.xml);

Note Dans Spring3, la solution alternative consiste à utiliser JavaConfig @Import .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X