Context 분리와 전략

CHM·2022년 6월 20일
0

Spring

목록 보기
18/26
post-custom-banner

Spring에서 애플리케이션을 개발할 때 Container에서 빈을 DI와 DL을 통해 프로그래밍을 진행하게 된다. 이 때 Container를 두 가지로 분리해 사용하는 경우가 일반적이다.

Servlet Context

  • DispatcherServlet - 웹의 요청을 최초로 접수
  • DispatcherServlet - 설정 파일을 이용해서 ServletContext(스프링 컨테이너) 로딩
  • Spring MVC와 관련 있는 빈을 설정
    • Controllers
    • ViewResolver
    • HandlerMapping

Root Context

  • Spring MVC와 분리되어 분리하고 싶을 때 사용
  • Servlet Context에서는 Root Context의 모든 빈을 참조할 수 있지만,
    Root Context는 Root Context에서는 Servlet Context의 빈들을 참조할 수 없다.
  • Servlet Context와 동일한 Bean이 있을 경우 Servlet Context Bean이 우선시 된다.
  • 전체 계층 구조에서 최 상단에 위치
  • 서로 다른 서블릿 컨텍스트에서 공유해야하는 Bean들을 등록해놓고 사용 가능
  • 웹 어플리케이션 전체에 적용 가능한 DB연결, 로깅 기능 등에 사용
    • Services
    • Repositories
  • 하나의 컨텍스트에 정의된 AOP 설정은 다른 컨텍스트의 빈에 영향 x

Root Context 추가를 위한 설정

web.xml

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<servlet>
  ...(기존코드)

Spring Bean Context File로 root-context.xml 생성

  • Bean 자동 인식을 위한 Autoscan(component scan) 기능
  • kr.co.acomo.hello 하위에 Controller를 제외한 나머지 annotation들이 전부 스캔이 되어야함.
<context:component-scan base-package="kr.co.acomo.hello">
  <context:exclued-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
post-custom-banner

0개의 댓글