스프링의 두 가지 유형의 컨테이너
Application Context
Web Application Context
위의 내용에서 ContextLoaderListener는 root-context.xml 을 로드하고 Application Context를 생성하도록 스프링에 요청하고 있다. 다시 말해서, ContextLoaderListener 는 스프링 설정파일을 읽으며 web.xml에 contextConfigLocation 에 <param-value> 값을 파싱하고 싱글톤 빈을 로드한다. (root-context.xml을 로드)
그리고 이러한 컨텍스트에는 아래와 같은 내용들이 있을 수 있다. 그리고 각각의 Application 마다 각각의 Application Context 가 존재한다.
- middle-tier transactional services ( 중간계층 트랜잭션 서비스 )
- data access objects ( DAO )
- use (and re-use) across the application ( 재사용 개체 )
ContextLoaderListener 는 두가지 역할을 가지고 있다.
ApplicationContext 의 라이프 사이클을 ServletContext 라이프 사이클과 연결
ApplicationContext 의 생성을 자동화하기 때문에 명시적 코드 작성 불필요
다른 컨텍스트에는 Application Context 의 하위 컨텍스트인 Web Application Context 가 존재한다. 스프링에 정의된 각각의 DispatcherServlet 에는 연관된 각각의 WebApplicationContext 가 있다. WebApplicationContext 의 초기화는 아래와 같이 발생된다. 아래의 내용도 web.xml에 존재
위의 사진에서 서블릿의 이름은 appServlet 이다. 그리고 해당 xml의 이름은 servlet-context.xml 이다.
ApplicationContext에서 사용할 수 있는 Bean은 각각의 WebApplicationContext에서 참조할 수 있다. 따라서 ApplicationContext 와 WebApplicationContext 를 구분해서 사용하면 좋다고 한다. 그리고 아래의 내용은 ApplicationContext 에서 정의하는 것이 좋다고 한다.
Business Logic Components ( 비즈니스 로직 )
Data Access Classes ( 데이터 액세스 클래스 )
(= Middle-Tier Services ( 중간계층 서비스 ) )
DispatcherServlet 각각은 WebApplicationContext 에 정의되어 있다.
ApplicationContexts & WebApplicationContexts 이해
- ApplicationContexts 는 계층구조를 띄며 자식 컨텍스트는 WebApplicationContext 이다.
- ContextLoaderListener 는 WebApplicationContext를 만들고 이를 ServletContext에 저장
- DispatcherServlet 은 자체의 WebApplicationContext를 만들어 handlers/controllers/view-resolvers 를 관리한다.
글 자체가 외국어를 번역해서 하였기 때문에 굉장히 불완전하다. 더 공부
'Spring' 카테고리의 다른 글
20180408 패키지 구성 방법 두가지 (0) | 2018.04.08 |
---|---|
20180319 Jackson JSON Java Parser API (0) | 2018.03.19 |
20180301 @Autowired 에 대한 이해. (0) | 2018.03.01 |
20180206 DispatcherServlet ? (디스패처 서블릿) (0) | 2018.02.06 |
20180205 <context:component-scan base-package="" /> (수정 : 2018 12 06) (0) | 2018.02.05 |