복붙노트

[SPRING] 스프링 빈 설정 파일은 Maven WAR 모듈에서 어디로 이동합니까?

SPRING

스프링 빈 설정 파일은 Maven WAR 모듈에서 어디로 이동합니까?

나는 많은 샘플 프로젝트를 살펴 보았고 공통된 모범 사례를 애 태우는 것처럼 보일 수 없다. Spring 빈 설정 파일이 때때로 src / main / webapp / WEB-INF 디렉토리에있는 것을 보았습니다. 필자는 web.xml의 Servlet 정의와 함께 다음과 같이 보았습니다.

<servlet>
    <servlet-name>my-stuff</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/my-stuff-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

그러나 web.xml 최상위 수준에 포함 된 bean 구성 파일 (즉, 서블릿 외부)도 보았습니다. 이것은 무엇을 의미 하는가? Cross-Servlet Bean에 대한 것입니까? 때로는 src / main / webapp / WEB-INF 디렉토리에 있고 때로는 src / main / resources에 있습니다. 또한 나는 src / main / resources에있는 모든 것을 가지고 WAR 모듈에 정의 된 다른 bean 설정 파일을 보았다.

Spring 문서를 읽고 다시 읽었지만, 기본 컨텍스트 설정 파일은 Servlet 컨텍스트 설정 파일이 {servlet-name} -servlet이라는 src / main / webapp / WEB-INF 디렉토리에 있어야한다는 것입니다. xml.

그래서 가장 좋은 방법은 무엇이며 왜 그럴까요?

해결법

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

    1.Spring의 애플리케이션 컨텍스트는 하위 컨텍스트가 상위 컨텍스트에 정의 된 Bean에 액세스 할 수있는 계층 구조를 형성 할 수있다.

    Spring의 애플리케이션 컨텍스트는 하위 컨텍스트가 상위 컨텍스트에 정의 된 Bean에 액세스 할 수있는 계층 구조를 형성 할 수있다.

    일반적인 스프링 MVC 웹 애플리케이션은 두 가지 레벨을 가진 계층을 포함한다 :

    후자의 맥락은 전자의 자식이다.

    웹 어플리케이션이 Spring MVC를 프리젠 테이션 프레임 워크로 사용하지 않으면 DispatcherServlet과 컨텍스트가 없습니다. 일부 매우 간단한 Spring MVC 샘플에는 ContextLoaderListener와 루트 컨텍스트가 없습니다 (단, Spring Security와 같은 크로스 서블릿 기능에는 루트 컨텍스트가 필요합니다).

    웹 응용 프로그램의 구성 파일은 기본적으로 webapp의 루트 폴더에 있습니다. 그러나 클래스 경로 (src / main / webapp)에 배치 할 수 있습니다.이 경우 classpath : prefix를 통해 액세스합니다. 서블릿 컨테이너가없는 통합 테스트에서이 파일 중 일부를 사용하려는 경우 유용 할 수 있습니다. 또한 classpath : 접두사는 별도의 이슈 (예 : / WEB-INF / lib의 jar 파일)에서 구성 파일을로드하려는 경우 유용 할 수 있습니다.

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

    2.WAR를 기본적으로 비우지 만 web.xml 등을 위해서는 WAR에 포함 된 별도의 JAR에서 코드 구성, 스프링 구성을 유지하는 것이 종종 좋은 스타일이라고 생각합니다. 이렇게하면이 질문을하지 않아도됩니다. :-) classpath : 접두사를 사용하여 해당 스프링 구성을 참조 할 수 있습니다.

    WAR를 기본적으로 비우지 만 web.xml 등을 위해서는 WAR에 포함 된 별도의 JAR에서 코드 구성, 스프링 구성을 유지하는 것이 종종 좋은 스타일이라고 생각합니다. 이렇게하면이 질문을하지 않아도됩니다. :-) classpath : 접두사를 사용하여 해당 스프링 구성을 참조 할 수 있습니다.

    이 레이아웃의 한 가지 장점은 JAR 내에서 WAR의 전체 Spring 구성을 인스턴스화하는 Unittest를 쉽게 작성할 수 있다는 것입니다. 실제 테스트에는이 방법을 사용하지 않는 것이 좋지만, 응용 프로그램을 다시 배포하지 않고도 구성 파일의 전체 구조를 실수로 깨뜨린 경우 빠른 피드백을 얻을 수 있습니다.

    Spring 구성 파일을 WAR에 넣어야 할 필요가 있다면 (아마도 WAR 자체에서 구현 된 bean을 참조하기 때문에) 위에서 설명한 이유로 일반적인 자원 경로 / WEB-INF / classes에도 넣을 수 있습니다.

  3. from https://stackoverflow.com/questions/3703389/where-do-spring-bean-configuration-files-go-in-a-maven-war-module by cc-by-sa and MIT license