[SPRING] 루트 컨텍스트와 디스패처 서블릿 컨텍스트가 Spring MVC 웹 애플리케이션과 정확히 얼마나 일치합니까?
SPRING루트 컨텍스트와 디스패처 서블릿 컨텍스트가 Spring MVC 웹 애플리케이션과 정확히 얼마나 일치합니까?
Spring MVC를 공부 중이고 의심 스럽다.
그래서, 사용자 요청을 처리하는 DispatcherServlet을 구성하는이 구성 클래스가 있습니다.
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = ...
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("main", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("main/");
}
}
DispatcherServlet이 어떻게 작동하는지는 분명합니다. 나의 의심은 컨텍스트 개념과 관련이 있습니다.
1) 정확하게 컨텍스트를 나타내는 것은 무엇입니까? 내 생각에 그것은 특정 목적을 가지고 환경으로 통하는 콩 세트와 같다고 생각합니다. 그러나 나는이 주장에 대해 절대 진실이 아닙니다.
2) 루트 컨텍스트와 디스패처 서블릿 컨텍스트의 차이점은 무엇입니까?
3) dispatcherContext에 정의 된 bean은 rootContext에 정의 된 bean에 액세스 할 수 있다는 것을 이해합니다. (반대는 사실이 아닙니다.) 왜?
Txx
해결법
-
==============================
1.Spring 애플리케이션의 루트 컨텍스트는 ContextLoaderListener에 의해로드되는 ApplicationContext입니다. 이 컨텍스트에는 서비스, 리포지토리, 인프라 빈 (DataSource, EntityManagerFactorys 등)과 같은 전역 적으로 사용 가능한 리소스가 있어야합니다.
Spring 애플리케이션의 루트 컨텍스트는 ContextLoaderListener에 의해로드되는 ApplicationContext입니다. 이 컨텍스트에는 서비스, 리포지토리, 인프라 빈 (DataSource, EntityManagerFactorys 등)과 같은 전역 적으로 사용 가능한 리소스가 있어야합니다.
ContextLoaderListener는이 컨텍스트를 ServletContext에 org.springframework.web.context.WebApplicationContext.ROOT라는 이름으로 등록합니다.
ApplicationContext를 직접로드하고 위의 이름으로 ServletContext에 등록하면 루트 컨텍스트로 적합합니다.
Spring 애플리케이션의 자식 컨텍스트는 DispatcherServlet (또는 Spring-WS 애플리케이션의 MessageDispatcherServlet)에 의해로드되는 ApplicationContext이다. 이 컨텍스트는 ViewResolvers, HandlerMappings 등의 스프링 MVC를 위해 해당 컨텍스트와 관련된 빈만을 포함해야한다.
서블릿은이 컨텍스트를 org.springframework.web.servlet.FrameworkServlet.CONTEXT.
이라는 이름으로 ServletContext에 등록합니다. 자식 컨텍스트는 여러 컨텍스트를 가질 수 있으므로 부모 컨텍스트에만 액세스 할 수 있습니다. 예를 들어 Spring MVC와 Spring WS 애플리케이션을 결합한 경우. 부모 컨텍스트는 잘 알려진 이름을 가진 ServletContext에서 자식을 찾아 냄으로써 그것을 탐지한다.
루트 컨텍스트가 빈을 연결하는 데 사용할 자식에 대한 액세스 권한을 갖고 있다면? 그 다음으로, AOP가 관련 될 때 놀라운 결과를 얻을 수도 있습니다. 자식 컨텍스트에 정의 된 AOP는 루트 컨텍스트에 구성된 Bean에 갑자기 영향을줍니다.
from https://stackoverflow.com/questions/30639842/how-exactly-are-the-root-context-and-the-dispatcher-servlet-context-into-a-sprin by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring bean 정의를 오버라이드하는 방법은 무엇입니까? (0) | 2019.03.12 |
---|---|
[SPRING] XML 스프링 스케줄링 설정에서 주석 / 코드 설정으로 이동하는 방법? (0) | 2019.03.12 |
[SPRING] HTTPS / HTTP 포트를 실행하기 위해 Spring Boot를 설정하는 방법 (0) | 2019.03.05 |
[SPRING] 스프링 데이터 JPA에서 LazyInitializationException을 해결하는 방법? (0) | 2019.03.05 |
[SPRING] Spring MVC 요청없이 WEB-INF하에 파일 가져 오기 (0) | 2019.03.05 |