2011-02-27 4 views
44

봄에 ApplicationContext 계층 구조를 이해하려고합니다. Spring ApplicationContext 계층 구조를 사용하는 이유는 무엇입니까?

나는 다음과 같은

  1. ApplicationContext 중이 개 1 이상의 부모 의 ApplicationContext를 가질 수 없습니다 배웠습니다.
  2. 주어진 ApplicationContext가 빈을 해석 할 수없는 경우, 해결 방법은 부모에게 전달됩니다.
  3. 의 상위이며 ApplicationContext는 해당 생성자에 으로 지정됩니다.

단일 ApplicationContext 대신 ApplicationContext 계층 구조를 사용해야하는 경우를 알고 싶습니다.

Google에서 얻을 수있는 최선은 this입니다. 그리고 내가 이해할 수있는 것은, 애플리케이션이 다양한 레이어에 정의 된 많은 수의 bean을 가지고 있다면, 각 레이어가 고유 한 ApplicationContext를 갖는 것이 이점이된다는 것입니다. 이해하지 못하는 것은 무엇을하는 것의 이점이며, 그 이익은 어떻게 달성되는 것입니까?

TIA, 비제이

답변

43

이의 고전적인 사용의 경우는 그들 사이 콩을 공유해야하는 자신의 응용 프로그램 컨텍스트를 가진이 서블릿의 각각 하나의 웹 애플리케이션 내에서 여러 봄 DispatcherServlet 가지고 있지만 때입니다 . 이 경우 각 서블릿 appcontext의 부모 인 webapp의 레벨에 세 번째 컨텍스트를 추가합니다.

단일 JavaEE EAR에 여러 개의 웹 응용 프로그램이 번들되어있는 경우와 같이이 패턴을 더 취할 수 있습니다. 여기서 EAR은 자체 컨텍스트를 가질 수 있습니다.이 컨텍스트는 개별 웹 응용 프로그램 컨텍스트의 부모이며 서블릿 컨텍스트의 부모입니다. 당신은이 책임 계층을 가지고 있습니다.

다른 상황에서는 컨텍스트 구조가 다른 요인에 의해 결정됩니다. 예를 들어, Spring Security는 Spring MVC와는 별개이며, Webapp 컨텍스트에서 컨피규레이션 빈을 필요로합니다. Spring MVC를 사용하기 원한다면, 그 config를위한 부모 webapp 컨텍스트를 가진 서블릿 컨텍스트로 들어가야한다.

+6

더 자세히 읽으면서 다음을 이해했습니다 (스카프 맨은 이미이 부분을 나타 냈습니다). 각 Spring MVC 웹 애플리케이션은 각 DispatcherServlet에 대해 하나의 루트 애플리케이션 컨텍스트와 하나의 서블릿 애플리케이션 컨텍스트를 가지고 있습니다. 루트 응용 프로그램 컨텍스트는 각 서블릿 응용 프로그램 컨텍스트의 부모입니다. "contextConfigLocation"(web.xml의 context-param)에 정의 된 bean은 루트 응용 프로그램 컨텍스트로로드됩니다. -servlet.xml의 빈은 서블릿 응용 프로그램 컨텍스트에로드됩니다. EAR에 여러 웹 응용 프로그램이있는 경우 EAR 수준 응용 프로그램 컨텍스트는 EAR에서 각 웹 응용 프로그램의 루트 컨텍스트를 상위로 지정할 수 있습니다. –

+0

@ user636334 : 예, 그게 전부입니다. – skaffman

관련 문제