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 ?
Réponses
Trop de publicités?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" } );
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
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 .
- Réponses précédentes
- Plus de réponses