복붙노트

[SPRING] 봄에 다른 xml 파일의 빈을 참조하는 법

SPRING

봄에 다른 xml 파일의 빈을 참조하는 법

Spring bean이 xml 파일에 정의되어있다. 나는 다른 XML 파일에서 그것을 참조하고 싶다. 어떻게해야할까요?

해결법

  1. ==============================

    1.몇 가지 옵션이 있습니다.

    몇 가지 옵션이 있습니다.

    <import resource="classpath:config/spring/that-other-xml-conf.xml"/>
    
    <bean id="yourCoolBean" class="org.jdong.MyCoolBean">
        <property name="anotherBean" ref="thatOtherBean"/>
    </bean>
    

    당신이 그것을 만들 때 두 파일을 모두 ApplicationContext의 일부로 만들고, => import가 필요 없다.

    예를 들어 테스트하는 동안 필요하다면 :

    @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" } );
    
  2. ==============================

    2.을 사용하여 빈을 정의하는 XML을 가져 오면 빈 정의를 사용할 수 있습니다.

    을 사용하여 빈을 정의하는 XML을 가져 오면 빈 정의를 사용할 수 있습니다.

    자원 속성에서 classpath :를 사용할 수 있습니다.

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

    Spring Reference의이 장에서 "3.18. Bean 정의를 한 파일에서 다른 것으로 가져 오기"를 참조하십시오.

  3. ==============================

    3.동일한 XML 파일에서 bean을 참조하는 것과 똑같이 참조합니다. 스프링 컨텍스트가 여러 XML 파일로 구성된 경우 모든 빈은 동일한 컨텍스트의 일부이므로 고유 한 네임 스페이스를 공유합니다.

    동일한 XML 파일에서 bean을 참조하는 것과 똑같이 참조합니다. 스프링 컨텍스트가 여러 XML 파일로 구성된 경우 모든 빈은 동일한 컨텍스트의 일부이므로 고유 한 네임 스페이스를 공유합니다.

  4. ==============================

    4.또는 단일 XML 파일의 크기가 커지지 않도록 콩을 여러 파일로 리팩토링하는 경우 단순히 현재 폴더에서 참조하기 만하면됩니다.

    또는 단일 XML 파일의 크기가 커지지 않도록 콩을 여러 파일로 리팩토링하는 경우 단순히 현재 폴더에서 참조하기 만하면됩니다.

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

    5.또한 코드에 여러 개의 Spring 빈 설정 파일을 로딩하여이 문제를 해결할 수도있다.

    또한 코드에 여러 개의 Spring 빈 설정 파일을 로딩하여이 문제를 해결할 수도있다.

    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 파일을 만들고 다음과 같이 전체 Spring bean 파일을 가져 오십시오.

    <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를 사용하는 것이다.

  6. from https://stackoverflow.com/questions/7711750/how-to-reference-a-bean-of-another-xml-file-in-spring by cc-by-sa and MIT license