복붙노트

[SPRING] applicationContext를 여러 파일로 분할

SPRING

applicationContext를 여러 파일로 분할

Spring의 설정을 여러 개의 XML 파일로 분할하는 올바른 방법은 무엇인가?

내가 가지고있는 순간에

내 web.xml은 다음과 같습니다.

<servlet>
    <description>Spring MVC Dispatcher Servlet</description>
    <servlet-name>intrafest</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/foo-*.xml
        </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            /WEB-INF/foo-*.xml
    </param-value>
</context-param>


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

실제 질문 :

foo-servlet.xml에서 정의 된 bean을 foo-service.xml에서 참조 할 수 있으려면 무엇을 명심해야합니까? 이것은 web.xml에서 contextConfigLocation을 지정하는 것과 관련이 있습니까?

업데이트 1 :

스프링 프레임 워크 3.0을 사용하고 있습니다. 다음과 같이 리소스 가져 오기를 수행 할 필요가 없다는 것을 이해합니다.

 <import resource="foo-services.xml"/> 

이것은 올바른 가정입니까?

해결법

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

    1.다음 설정이 가장 쉽다는 것을 알았습니다.

    다음 설정이 가장 쉽다는 것을 알았습니다.

    DispatcherServlet의 기본 구성 파일 로딩 메커니즘을 사용하십시오.

    귀하의 경우에는 단순히 WEB-INF 디렉토리에 intrafest-servlet.xml 파일을 만들고 web.xml에 특정 정보를 지정할 필요가 없습니다.

    intrafest-servlet.xml 파일에서 가져 오기를 사용하여 XML 구성을 작성할 수 있습니다.

    <beans>
      <bean id="bean1" class="..."/>
      <bean id="bean2" class="..."/>
    
      <import resource="foo-services.xml"/>
      <import resource="foo-persistence.xml"/>
    </beans>
    

    Spring 팀은 (Web) ApplicationContext를 생성 할 때 실제로 여러 config 파일을로드하는 것을 선호합니다. 여전히 이런 식으로하고 싶다면 컨텍스트 매개 변수 (context-param)와 서블릿 초기화 매개 변수 (init-param)를 모두 지정할 필요가 없다고 생각합니다. 두 사람 중 하나가 할 것입니다. 쉼표를 사용하여 여러 구성 위치를 지정할 수도 있습니다.

  2. ==============================

    2.마이크 네슨 (Mike Nereson)은 그의 블로그에서 다음과 같이 말하고 있습니다.

    마이크 네슨 (Mike Nereson)은 그의 블로그에서 다음과 같이 말하고 있습니다.

    http://blog.codehangover.com/load-multiple-contexts-into-spring/

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

    3.두 가지 유형의 컨텍스트가 있습니다.

    두 가지 유형의 컨텍스트가 있습니다.

    1 : 루트 컨텍스트 (부모 컨텍스트. 일반적으로 모든 jdbc (ORM, Hibernate) 초기화 및 기타 스프링 보안 관련 구성 포함)

    2 : 개별 서블릿 컨텍스트 (자식 컨텍스트. 전형적으로 Dispatcher 서블릿 컨텍스트와 spring-mvc (컨트롤러, URL 매핑 등)와 관련된 모든 bean을 초기화합니다.

    다음은 여러 응용 프로그램 컨텍스트 파일을 포함하는 web.xml의 예입니다.

         스프링 웹 애플리케이션 예제                    org.springframework.web.context.ContextLoaderListener                    contextConfigLocation                      /WEB-INF/spring/jdbc/spring-jdbc.xml             /WEB-INF/spring/security/spring-security-context.xml                                  spring-mvc          org.springframework.web.servlet.DispatcherServlet                       contextConfigLocation                              /WEB-INF/spring/mvc/spring-mvc-servlet.xml                                          spring-mvc          / admin / *     

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

    4.@eljenso : 응용 프로그램이 SPRING WEB MVC를 사용하는 경우 intrafest-servlet.xml 웹 응용 프로그램 컨텍스트 xml이 사용됩니다.

    @eljenso : 응용 프로그램이 SPRING WEB MVC를 사용하는 경우 intrafest-servlet.xml 웹 응용 프로그램 컨텍스트 xml이 사용됩니다.

    그렇지 않으면 @kosoant 설정이 정상입니다.

    간단한 예제는 SPRING WEB MVC를 사용하지 않지만 SPIING IOC를 utitlize하려는 경우 :

    web.xml에서 :

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:application-context.xml</param-value>
    </context-param>
    

    그런 다음 application-context.xml에 다음이 포함됩니다. 이러한 import 문은 다양한 응용 프로그램 컨텍스트 파일을로드하고 main application-context.xml에 넣습니다.

    감사와 희망이 도움이됩니다.

  5. ==============================

    5.저는 모듈러 스프링 컨텍스트의 저자입니다.

    저는 모듈러 스프링 컨텍스트의 저자입니다.

    이것은 XML 기반 구성 메타 데이터 작성을 사용하는 것보다 더 많은 스프링 컨텍스트 구성을 허용하는 작은 유틸리티 라이브러리입니다. modular-spring-contexts는 기본적으로 독립된 응용 프로그램 컨텍스트 인 모듈을 정의하고 모듈이 원래 모듈로 내보내 진 다른 모듈에서 Bean을 가져올 수있게하여 작동합니다.

    핵심 포인트는 다음과 같습니다.

    간단한 예제는 다음과 같습니다.

    moduleDefinitions.xml 파일 :

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config />
    
        <module:module id="serverModule">
            <module:config location="/serverModule.xml" />
        </module:module>
    
        <module:module id="clientModule">
            <module:config location="/clientModule.xml" />
            <module:requires module="serverModule" />
        </module:module>
    
    </beans>
    

    파일 serverModule.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config />
    
        <bean id="serverSingleton" class="java.math.BigDecimal" scope="singleton">
            <constructor-arg index="0" value="123.45" />
            <meta key="exported" value="true"/>
        </bean>
    
    </beans>
    

    파일 clientModule.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config />
    
        <module:import id="importedSingleton" sourceModule="serverModule" sourceBean="serverSingleton" />
    
    </beans>
    
  6. from https://stackoverflow.com/questions/600095/splitting-applicationcontext-to-multiple-files by cc-by-sa and MIT license