Context란?
- 어떤 객체를 핸들링하기 위한 접근 수단
ex) print를 하기 위해서는 printContext를 사용해야하고, Servlet을 수행하기 위해서는 Servlet Context를 사용해야한다.
web.xml
- web.xml에서
ContextLoaderListener
(root-context)와 DispatcherServlet(servlet-context) 생성.
➡︎ ApplicationContext
(root)는 ContextLoaderListener 클래스에 의해 만들어지고,
➡︎ WebApplicationContext
(servlet)은 DispatcherServlet 클래스에 의해 만들어진다.
root-content.xml
또는 ApplicationContext.xml
에 따라 ApplicationContext를 생성한다.ApplicationContext.xml
에 등록돼있는 설정에 따라 Spring Container가 구동되며, 이때 개발자가 작성한 비지니스로직과 DAO, VO등의 객체가 생성된다.ApplicationContext (인터페이스) - root
- 전체 계층구조에서 최상단에 위치한 컨텍스트
- 서로 다른 서블릿 컨텍스트에서 공유해야하는 Bean들을 등록해놓고 사용할 수 있다.
- 이 context에 등록되는 모든 bean은 모든 context에서 사용 가능
- 웹 어플리케이션 전체에 적용해야하는 기능 ex)DB 연결, 로깅기능 등에 이용(service, dao 포함)
- Servlet Context에 등록된 Bean 이용 불가능! (servlet이 더하위)
- Servlet Context와 동일한 Bean이 있을 경우 Servlet Context Bean이 우선된다.
- 하나의 컨텍스트에 정의된 AOP 설정은 다른 컨텍스트의 빈에는 영향을 미치지 않는다.
WebApplicationContext 인터페이스 -> Servlet Context 객체반환
- 서블릿에서만 이용되는 컨텍스트
- 이 context에 등록되는 bean들은 servlet context에서만 사용 가능
- 타 서블릿과 공유하기 위한 Bean들은 루트 웹 어플리케이션 컨텍스트에 등록해놓고 사용해야 한다
- DispatcherServlet은 자신만의 컨텍스트를 생성&초기화하고 동시에 루트 어플리케이션 컨텍스트를 찾아서 자신의 부모 컨텍스트로 사용
WebApplicationContext vs ApplicationContext
- 스프링 안에는 여러 종류의 ApplicationContext 구현체가 있다.
- Web
ApplicationContext
는ApplicationContext
를 확장한 WebApplicationContext 인터페이스의 구현체를 말한다.- WebApplicationContext는 ApplicationContext에
getServletContext()
메서드가 추가된 인터페이스다.
이 메서드를 호출하면 ServletContext를 반환합니다.
➡︎ 결국 WebApplicationContext는 ApplicationContext의 자식이면서 ServletContext와 연관 관계!에 있다는 정도로 정리가 됩니다
이 메서드가 추가되면 ServletContext를 이용한 몇가지 빈 생애 주기 스코프가 추가 되기도 합니다.
출처