web.xml에 몇 가지 태그의 설정을 공부하다 ApplicationContext까지 오게되었다. 추후 혼자 web Application 설정 부분 개발을 맡게 되었을 때는 지금보다 더 깊은 이해가 필요할 것 같지만 지금은 어느정도 개념파악 후 정리 정도로 마무리했다.
우선 ApplicationContext는 오브젝트를 생성하거나 관계설정, 만들어지는 방식, 자동생성, 후처리 등을 담당하는 Spring의 대표적인 인터페이스이다.
Spring에서는 IoC컨테이너라 하기도하고, Spring컨테이너라고 부르기도 한다. 또는 BeanFactory라고 하기도 한다.
이러한 ApplicationContext의 하위인터페이스 중 WebApplicationContext가 있다.
이 WebApplicationContext는 web.xml 설정 시 사용된다.
이제 web.xml 중 WebApplicationContext와 관련된 부분을 소스와 함께 정리해겠다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
</context-param>
<servlet>
<servlet-name>exServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml</param-value>
</init-param>
<load-on-startup>120</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>exServlet</servlet-name>
<url-pattern>*.do</url-pattern>
<url-pattern>/apiService/*</url-pattern>
</servlet-mapping>
적혀있는 순서대로 listener태그부터 살펴보겠다.
listener-class태그에 있는 ContextLoaderListener은 Root WebApplicationContext를 생성한다.
context-param태그는 ContextConfigLocation이란 파라미터 이름으로 context-*.xml의 내용을 가져온다.
servlet태그는 dispatcherServlet이 Root WebApplicationContext를 부모로 하는 Servlet WebApplicationContext를 생성해준다. Root WebApplicationContext와 Servlet WebApplicationContext 두 계층간의 관계연결은 param-name태그의 contextConfigLocation이 기준점이 되어준다.
마지막으로 Servlet-mapping태그는 exServlet이 발생하는 url-pattern을 설정한다.
여기서 WebApplicationContext가 Root와 Servlet으로 나뉘는 이유는 무엇일까?
그 이유는 공통사용 그리고 웹과 관련된 UI성, 각각의 Servlet에 해당하는 것들을 나누어 사용하려고 나눈다.
아래는 각 WebApplicationContext의 특징이다.
Root WebApplicationContext
- 서로 다른 여러 Servlet에서 공통으로 사용할 수 있는 Bean을 선언
- 특정 Servlet 설정과 관계없는 설정을 함(@Service, @Repository, @Configuration, @componet)
- Servlet Context에서 정의된 Bean 사용불가
- 주로 도메인과 관련된 빈들 사용
Servlet WebApplicationContext
- Servlet 단위로 생성되는 Context
- Root WebApplicationContext에 같은 id로 된 Bean이 등록되있는 경우, Servlet WebApplicationCOntext로 사용됨
- Bean을 찾을 때 Servlet WebApplicationContext를 먼저 찾고, 없다면 Root WebApplicationContext에서 찾음
- Root WebApplicationContext에서 정의된 Bean 사용 가능
- 주로 웹과 관련된 UI성 빈 사용
'프로그래밍 > Spring' 카테고리의 다른 글
Spring AOP 간단 개념정리 (0) | 2021.01.26 |
---|---|
스프링 배치. 그리고 스케줄러, Quartz (0) | 2020.03.26 |
@Transactional / 트랜잭션 (0) | 2020.03.16 |
web.xml 간단 정리 (0) | 2019.09.22 |
댓글