복붙노트

[SPRING] 스프링 구성

SPRING

스프링 구성

나는 Spring에서 읽었으며 필요한 스프링 구성 데이터에 대해 계속 이야기하지만이 XML 파일은 어디에 두는가? 당신은 그것을 무엇으로 저장합니까? 이 정보를 어디서든지 찾을 수없는 것 같습니다.

해결법

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

    1.더 중요한 것은 어디에서, 질문은 당신을위한 것이어야합니다 :이 '구성 데이터'는 정확히 무엇입니까?

    더 중요한 것은 어디에서, 질문은 당신을위한 것이어야합니다 :이 '구성 데이터'는 정확히 무엇입니까?

    문서에서 :

    그러나 주석이나 Java 기반 구성을 사용하여 POJO에 대한 구성 메타 데이터를 제공 할 수도 있습니다.

    Tnem이 이미 언급했듯이 여기서는 다양한 시나리오에서 컨테이너를 인스턴스화하는 방법을 찾을 수 있습니다.

    그리고이 IoC 컨테이너는 무엇입니까?

    IoC (inversion of control)와 DI (dependency injection)는 마틴 파울러 (Martin Fowler)가 작성한 용어로 Spring의 문서 섹션을 참조하십시오.

    Spring을 사용하여 개발에 참여하려면 전체 참조를 읽어 보시기 바랍니다.

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

    2.순수한 이름보다 재미있는 점은 파일을 어떻게 분할하고 각 부분에 이름을 부여 할 것인가입니다.

    순수한 이름보다 재미있는 점은 파일을 어떻게 분할하고 각 부분에 이름을 부여 할 것인가입니다.

    테스트가없는 독립 실행 형 또는 웹 응용 프로그램이있는 경우 모든 구성을 하나의 파일에 넣을 수 있습니다. - 그러나 시험을 치르지 않고서는 안됩니다.

    테스트가 포함 된 웹 응용 프로그램이 있다고 가정합니다.

    그런 다음 구성을 두 개의 파일로 분할해야합니다. 하나는 순수 Java (웹 핍이없는) 구성이고 다른 하나는 WEB 응용 프로그램 용입니다.

    개인적으로 applicationContext.xml 및 webmvc-config.xml로 이름을 지정합니다. 웹 구성 파일의 기본 이름 (Dispatcher 서블릿에 대해 지정되지 않은 경우)은 /WEB-INF/-servlet.xml입니다.

    classpath : / META-INF / spring 디렉토리의 applicationContext.xml과 WEB-INF / spring의 webmvc-config.xml을 찾습니다. 그 위치는 Spring Roo의 스타일입니다. 그것은 작동하지만 다른 모든 폴더도 작동합니다. maven을 사용하기 때문에 파일의 정확한 위치는 다음과 같습니다.

    핵심 applicationContext.xml은 org.springframework.web.context.ContextLoaderListener로로드되고 Dispatcher Servlet에 의해 webmvc-config.xml이로드됩니다. web.xml :

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
    </context-param>
    
    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>CFMA-SpringProject</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    이제 모든 웹 작업을로드하지 않고 응용 프로그램의 비즈니스 논리에 대한 테스트를 작성하기 시작합니다. 그러나 대부분의 경우 그것은 enougth가 아닙니다. 예를 들어, MySql과 같은 영구 데이터베이스를 사용하여 일반 응용 프로그램을 실행하는 동안 (해당 문장에 대해 나를 비난하지 마십시오.) 또는 프로덕션 환경에서 jndi 구성된 db를 사용하려는 경우, 인 메모리 데이터베이스로 몇 가지 빠른 테스트를 실행하고 싶습니다. "정상적인"테스트 용으로 구성된 따라서 필요한 것은 두 가지 구성입니다. 모든 것을 두 번 쓰는 것이 아니라 가장 쉬운 방법은 applicationContext.xml을 두 파일로 분리하는 것입니다.

    (이제 web.xml에서 contextConfiguration의 패턴을 이해할 수 있습니다.)

    테스트에는 두 개의 파일이 필요합니다 (하나의 파일에 쓸 수 있지만 두 개를 선호합니다).  * testContext-h2DbConfig.xml applicationContext-db.xml의 테스트 형제이지만 테스트 데이터베이스가 있고 jndi가없는 파일입니다.  * textContext.xml 테스트 케이스에서 @ContextConfiguration이 참조하는 파일입니다. 이 파일에는 테스트에 필요한 구성 만 가져옵니다. 이 경우 다음과 같습니다.

    <import resource="classpath:/META-INF/spring/applicationContext.xml" /> 
    <import resource="classpath:/META-INF/spring/testContext-h2DbConfig.xml" />
    

    스프링을 사용하기 때문에 두 파일 모두 /src/test/resources/META-INF/spring/testContext.xml에 있습니다.

    테스트와 생산적인 구성이 다른 곳 (예 : 스케줄러)에 스프링 구성의 다른 측면이있는 경우 동일한 방법으로 분할 할 수 있습니다.

    컨벤션과 위치 지정 작업을 함께 나누는 방법을 이해 하시길 바랍니다.

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

    3.글쎄, "공식적인"이름이 있다면, 나는 그것이 스프링 녀석들로부터 온 것 같아. Spring의 적합성있는 Spring 프로젝트를 설정하는 도구는 Roo입니다. SRC_MAIN_RESOURCES / META-INF / spring / applicationContext.xml (Maven2 프로젝트의 src / main / resources에 대한 placehiolder 인 SRC_MAIN_RESOURCES 포함)가 있습니다.

    글쎄, "공식적인"이름이 있다면, 나는 그것이 스프링 녀석들로부터 온 것 같아. Spring의 적합성있는 Spring 프로젝트를 설정하는 도구는 Roo입니다. SRC_MAIN_RESOURCES / META-INF / spring / applicationContext.xml (Maven2 프로젝트의 src / main / resources에 대한 placehiolder 인 SRC_MAIN_RESOURCES 포함)가 있습니다.

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

    4.응용 프로그램에 따라 다르며, 일부 응용 프로그램은 Spring의 구성을 지원합니다.이 경우 프레임 워크 설명서를 확인해야합니다.

    응용 프로그램에 따라 다르며, 일부 응용 프로그램은 Spring의 구성을 지원합니다.이 경우 프레임 워크 설명서를 확인해야합니다.

    독립 실행 형 응용 프로그램 인 경우 파일을 아무 곳에 나 둘 수 있지만 일반적으로

    src/main/resources
    

    또는 자원의 서브 디렉토리.

    Spring 문서의 3.2.2 절에서는 ApplicationContext를 인스턴스화하는 방법을 보여줍니다.

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

    5.다른 사람들은 Spring 설정 파일의 이름이 그렇게 중요하지 않다고 지적했다. 진짜 질문은이 파일이 어떻게로드되는지입니다. 독립형 애플리케이션에서는 Spring 문서의이 부분에서 설명한대로 ClassPathXmlApplicationContext 클래스와 같은 것을 사용하여 명시 적으로 수행합니다.

    다른 사람들은 Spring 설정 파일의 이름이 그렇게 중요하지 않다고 지적했다. 진짜 질문은이 파일이 어떻게로드되는지입니다. 독립형 애플리케이션에서는 Spring 문서의이 부분에서 설명한대로 ClassPathXmlApplicationContext 클래스와 같은 것을 사용하여 명시 적으로 수행합니다.

    웹 애플리케이션에서 이것은 보통 구성 리스너에 대한 정의 및 구성 파일을 추가하여 web.xml 파일에 구성됩니다. 이것이 제가 사용하는 설정입니다 :

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:appContext.xml</param-value>
        </context-param>
    <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
    

    이렇게하면 응용 프로그램의 클래스 경로에있는 한 원하는 위치에 config 파일을 둘 수 있습니다. 공백으로 분리하여 param-value 요소에 여러 구성 파일을 지정할 수도 있습니다.

  6. from https://stackoverflow.com/questions/6283653/spring-configuration by cc-by-sa and MIT license