web-dev-qa-db-fra.com

comment référencer un bean d'un autre fichier xml au printemps

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?

36
Jeffrey.W.Dong

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 la construction ApplicationContext

Intégrez les deux fichiers à 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 {...}

Dans le cas où il s'agit d'une application Web, vous le feriez 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 autonome, d'une bibliothèque, etc., vous chargez votre 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" } );
54
tolitius

Importez simplement le xml définissant le bean avec <import resource="otherXml.xml"> et vous pourrez utiliser la définition du bean.

Vous pouvez utiliser classpath: dans l'attribut resource:

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

Reportez-vous à la section "3.18. Importation de définitions de bean d'un fichier dans un autre" dans ce chapitre de la référence Spring

6
Xavi López

Vous le référencez exactement comme vous référenceriez 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 ainsi un espace de noms unique.

5
JB Nizet

Ou si vous refactorisez simplement les beans dans plusieurs fichiers pour empêcher le fichier xml unique de grossir, faites-le simplement référence à partir de son dossier actuel:

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

Vous pouvez également vous y prendre en chargeant plusieurs fichiers de configuration du bean Spring dans le code:

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

Placez tous les fichiers XML Spring sous le chemin d'accès aux classes 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 sujette aux erreurs, la meilleure façon devrait être d'organiser tous vos fichiers de configuration Spring Bean en un seul fichier XML. Par exemple, créez un Spring-All-Module.xml fichier, et importez l'intégralité 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 celui-ci:

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

Remarque Dans Spring3, la solution alternative utilise JavaConfig @Import .

1
Program-Me-Rev