웹쪽 자원을 관리하는 DispatcherServlet과 그 외의 자원을 관리하는 ApplicationContext는 어떤 관계가 있을까? 예제에서는 DispatcherServlet과 ApplicationContext의 정보를 가져오기 위해 ApplicationContextAware를 구현한 클래스를 양쪽에 등록하고, 두 컨텍스트의 정보를 출력해봤다.
ApplicationContextHolder.java
package com.tistory.jekalmin.common;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ApplicationContextHolder implements ApplicationContextAware{
@Override
public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
System.out.println("================================================");
System.out.println("applicationContext : " + ctx.getId());
System.out.println("applicationContext hashCode : " + ctx.hashCode());
ApplicationContext parent = ctx.getParent();
if(parent != null){
System.out.println("parent : " + parent.getId());
System.out.println("parent hashCode : " + parent.hashCode());
}
System.out.println("================================================");
}
}
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/application-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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:spring/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
결과는 다음과 같다.
================================================
applicationContext : org.springframework.web.context.WebApplicationContext:
applicationContext hashCode : 966881334
================================================
================================================
applicationContext : org.springframework.web.context.WebApplicationContext:/dispatcherServlet
applicationContext hashCode : 1233412676
parent : org.springframework.web.context.WebApplicationContext:/SpringTest
parent hashCode : 966881334
================================================
applicationContext 먼저 생성되고, dispatcherServlet은 applicationContext를 부모로 가지고 있는다.