표준 스프링 웹 애플리케이션 (Roo 또는 "Spring MVC 프로젝트"템플릿으로 생성)은 ContextLoaderListener
및 DispatcherServlet
. 왜를 사용 DispatcherServlet
하여 전체 구성을로드하는 데 사용하지 않습니까?
ContextLoaderListener를 사용하여 웹과 관련이없는 항목을로드해야하고 DispatcherServlet을 사용하여 웹 관련 항목 (컨트롤러, ...)을로드해야한다는 것을 이해합니다. 결과적으로 부모와 자식 컨텍스트의 두 가지 컨텍스트가 생성됩니다.
배경:
나는 몇 년 동안이 표준적인 방식으로 그것을하고 있었다.
<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>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>roo</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>
이로 인해 두 컨텍스트 및 둘 사이의 종속성에 문제가 발생하는 경우가 많습니다. 과거에는 항상 해결책을 찾을 수 있었고 이것이 소프트웨어 구조 / 아키텍처를 항상 더 좋게 만든다는 강한 느낌을 받았습니다. 하지만 지금 은 두 가지 상황 모두에서 문제에 직면 해 있습니다 .
-그러나 이것은이 두 가지 컨텍스트 패턴을 다시 생각하게 만들고 스스로에게 묻고 있습니다. 왜이 문제를 겪어야하는지, 왜 모든 스프링 구성 파일을 하나로로드하지 않고 완전히 DispatcherServlet
제거 해야합니까 ContextLoaderListener
? (여전히 다른 구성 파일을 가지지 만 컨텍스트는 하나뿐입니다.)
제거하지 않을 이유가 ContextLoaderListener
있습니까?