본문 바로가기

spring

스프링 컨테이너의 관계

스프링 컨테이너의 구동 순서와 관계

1. 톰캣 서버를 구동하면 web.xml 파일을 로딩하여 서블릿 컨테이너가 구동된다.

 

2. 서블릿 컨테이너는 web.xml 파일에 등록된 ContextLoaderListener 객체를 생성(pre Loading) 한다.

이때 ContextLoaderListener 객체는 src/main/resources 소스 폴더에 있는 appliccationContext.xml 파일을 로딩하여 

스프링 컨테이너를 구동하는데, 이를 'Root 컨테이너'라고 한다. 그리고 이때, Service  구현 클래스나 DAO 객체들이 

메모리에 생성된다. 그리고 사용자가 로그인 버튼 ".do" d요청을 서버에 전달하면 서블릿 컨테이너는 DispatcherServlet 객체를 생성하고 

 

3 . DispatcherServlet 객체는 /WEB-INF/config 폴더에 있는 presentation-layer.xml 파일을 로딩하여 두 번째 스프링 컨테이너를 구동한다. 이 두 번째 스프링 컨테이너가 controller 객체를 메모리에 생성한다.

 

분명히 스프링 컨테이너는 두 개가 구동된다. 즉, ContextLoaderListener와 DispatcherServlet이 각각 XmlWebApplicationContext를 생성하는데, 이때 두 스프링 컨테이너의 역할과 기능이 다르다.

우선 ContextLoaderListener가 생성하는 스프링 컨테이너를 Root 컨테이너라고 하며, 쉽게 부모 컨테이너라고 생각하면된다. 

 

그리고 DispatcherServlet이 생성한 컨테이너는 Root 컨테이너가 생성한 객체를 이용하는 자식 컨테이너가 된다. 따라서 부모 컨테이너가 생성한 비즈니스 객체를 자식 컨테이너가 생성한 Controller에서 참조하여 사용할 수 있다.

부모(Root) 컨테이너와 자식 컨테이너의 관계

이는 부모 컨테이너가 자식 컨테이너보다 먼저 구동되므로 어찌 보면 당연한 결과라 할 수 있을 것이다.

 

[참조 스프링 퀵 스타트]

'spring' 카테고리의 다른 글

어노테이션 - @Component  (0) 2020.12.13
의존성 주입 어노테이션 - @Autowired  (0) 2020.12.13
Command 객체  (0) 2020.11.07
Spring MVC 구조 - (하)  (0) 2020.10.20
IOC(Inversion of Control)컨테이너 - 서블릿 컨테이너  (0) 2020.10.03