웹 애플리케이션의 컨텍스트 구성방법
가장 많이 사용하는 방법
=> 서블릿 컨텍스트(dispatcher-context.xml)와 루트 애플리케이션 컨텍스트(root-context.xml) 계층구조
- 스프링 웹 기술을 사용하는 경우 웹 관련 빈들은 서블릿 컨텍스트에 두고, 나머지는 루트 애플리케이션 컨텍스트에 등록한다.
- 루트 컨텍스트는 모든 서블릿 레벨 컨텍스트의 부모 컨텍스트가 된다.
루트 애플리케이션 컨텍스트 등록
=> 가장 간단한 방법은 서블릿의 이벤트 리스너를 이용하는 것이다.
=> 웹 애플리케이션의 시작과 종료시 발생하는 이벤트를 처리하는 리스너 ServlerContextListener를 이용 (ServletContextListener 인터페이스를 구현한 리스너는 웹 애플리케이션 전체에 적용 가능한 DB연결 기능이나 로깅 같은 서비스를 만드는데 유용하게 쓰인다.)
web.xml
<!-- spring 설정을 처리하는 리스너 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
기본 : XmlWebApplicationContext
XML설정파일위치 : /WEB-INF/applicationContext.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:context/root-context.xml</param-value>
</context-param>
컨텍스트 클래스와 설정파일 위치는 서블릿 컨텍스트 파라미터를 선언해서 변경할 수 있다.
다른 애플리케이션 컨텍스트 구현 클래스로 변경하고 싶으면 contextClass 파라미터를 이용해 지정한다.
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
서블릿 컨텍스트 등록
프론트 컨트롤러 서블릿 DispatcherServlet (web.xml에 등록하는 평범한 Servlet)
DispatcherServlet은 서블릿이 초기화될 때 자신만의 컨텍스트를 생성하고 초기화한다. 동시에 웹 애플리케이션 레벨에 등록된 루트 애플리케이션 컨텍스트를 찾아서 이를 자신의 부모 컨텍스트로 사용한다.
루트 애플리케이션 컨텍스트는 서비스 계층과 데이터 엑세스 계층의 빈을 모두 포함하고 있고, 그 외에도 각종 기반 서비스와 기술 설정을 갖고 있다. 따라서 설정파일을 여러개로 구분해두고 디폴트 설정파일 위치 대신 <context-param>으로 지정된 설정파일 위치를 사용하는 경우가 많다.
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:smartsuite/dispatcher-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
'프로그래밍 노트 > SPRING' 카테고리의 다른 글
[Spring] IoC(InversionOfControl) 컨테이너 6 (빈 등록 메타정보 구성 전략) (0) | 2018.08.28 |
---|---|
[Spring] IoC(InversionOfControl) 컨테이너 5 (빈 등록방법) (0) | 2018.08.27 |
[Spring] IoC(InversionOfControl) 컨테이너 3 (0) | 2018.08.08 |
[Spring] IoC(InversionOfControl) 컨테이너 2 (0) | 2018.08.08 |
[Spring] IoC(InversionOfControl) 컨테이너 1 (0) | 2018.08.08 |