как ссылаться на бин другого XML-файла весной - PullRequest
36 голосов
/ 10 октября 2011

У меня есть bean-компонент Spring, определенный в XML-файле.Я хочу сослаться на это из другого файла XML.Как я могу это сделать?

Ответы [ 5 ]

54 голосов
/ 10 октября 2011

У вас есть несколько вариантов:

Импорт

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

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


Включить в ApplicationContext Строительство

Сделайте оба файла частью вашего ApplicationContext, когда вы создадите его =>, тогда импорт не требуется.

Например, если вам это нужно во время тестирования:

@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 {...}

Если это веб-приложение, вы должны сделать это в 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>

Если это отдельное приложение, библиотека и т. Д., Вы бы загрузили ApplicationContext как:

new ClassPathXmlApplicationContext( 
    new String[] { "classpath:META-INF/conf/spring/this-xml-conf.xml",
                   "classpath:META-INF/conf/spring/that-other-xml-conf.xml" } );
6 голосов
/ 10 октября 2011

Просто импортируйте XML, определяющий компонент, с помощью <import resource="otherXml.xml">, и вы сможете использовать определение компонента.

Вы можете использовать classpath: в атрибуте resource:

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

См. «3.18. Импорт определений бинов из одного файла в другой» в этой главе Справочника по Spring

5 голосов
/ 10 октября 2011

Вы ссылаетесь на него точно так же, как на компонент в том же XML-файле. Если контекст весны состоит из нескольких файлов XML, все компоненты являются частью одного контекста и, таким образом, совместно используют уникальное пространство имен.

3 голосов
/ 17 июля 2015

Или, если вы просто реорганизуете bean-компоненты в несколько файлов, чтобы размер одного XML-файла не увеличивался в размерах, просто обратитесь к нему из его текущей папки:

<import resource="processors/processor-beans.xml"/>
1 голос
/ 25 сентября 2015

Вы также можете сделать это, загрузив несколько файлов конфигурации Spring bean в коде:

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

Поместите все весенние XML-файлы в classpath проекта:

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

Тем не менее, приведенная выше реализация является недостатком организации и подвержена ошибкам, поэтому лучше организовать все ваши файлы конфигурации Spring bean в один файл XML. Например, создайте файл Spring-All-Module.xml и импортируйте все файлы bean-компонентов Spring следующим образом:

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

Теперь вы можете загрузить один XML-файл, например так:

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

Примечание В Spring3 альтернативное решение использует JavaConfig @ Import .

...