복붙노트

[SPRING] DispatcherServlet이 다른 응용 프로그램 컨텍스트를 만드는 이유는 무엇입니까?

SPRING

DispatcherServlet이 다른 응용 프로그램 컨텍스트를 만드는 이유는 무엇입니까?

ContextLoaderListener 및 컨텍스트 init-parameter contextConfigLocation을 사용하여 루트 응용 프로그램 컨텍스트를 구성했습니다.

그런 다음 루트 컨텍스트는 JSF (* .jsf) 변수 해결 자에 의해 액세스됩니다. 그것은 잘 작동합니다.

이제 문제는 DispatcherServlet을 통해 진행되는 요청 (* .do)이 다른 응용 프로그램 컨텍스트를 얻고 싱글 톤 빈이 두 번 인스턴스화된다는 것입니다.

DispatcherServlet에 다른 응용 프로그램 컨텍스트가 필요하지 않습니다. ContextLoaderListener에 의해로드 된 기존 루트 응용 프로그램 컨텍스트를 다시 사용하도록 지정하려면 어떻게해야합니까?

노트

답변의 참조 페이지를 읽은 후에는 루트 컨텍스트와 디스패처 컨텍스트간에 컨텍스트 분리가 있음을 알고 있지만 참조가 어디로 가는지 알려주지 않습니다. 그래서 여기에 내 해결책이 있습니다. 아마 비슷한 질문에 직면 한 다른 사람들에게 도움이 될 것입니다.

해결법

  1. ==============================

    1.첫 번째 질문에 대답하기 위해 DispatcherServlet은 컨텍스트를 생성합니다. 컨텍스트를 생성하는 방법이며, 하나의 응용 프로그램에 DispatcherServlet이 여러 개 있으면 각각 따로 구성해야합니다. 그러므로 각각의 컨텍스트는 고유 한 컨텍스트를 가지며 이러한 컨텍스트 각각은 "루트"컨텍스트와 별개입니다. 실제 "작업중인"모든 bean은 다른 컨텍스트간에 공유 될 수 있도록 살아야합니다. 지난 몇 주간이 문제에 대한 혼란으로 생겨난 수많은 질문이있었습니다. 답변을 확인하여 어떻게 작동하는지 더 잘 이해할 수 있습니다.

    첫 번째 질문에 대답하기 위해 DispatcherServlet은 컨텍스트를 생성합니다. 컨텍스트를 생성하는 방법이며, 하나의 응용 프로그램에 DispatcherServlet이 여러 개 있으면 각각 따로 구성해야합니다. 그러므로 각각의 컨텍스트는 고유 한 컨텍스트를 가지며 이러한 컨텍스트 각각은 "루트"컨텍스트와 별개입니다. 실제 "작업중인"모든 bean은 다른 컨텍스트간에 공유 될 수 있도록 살아야합니다. 지난 몇 주간이 문제에 대한 혼란으로 생겨난 수많은 질문이있었습니다. 답변을 확인하여 어떻게 작동하는지 더 잘 이해할 수 있습니다.

    봄 XML 파일 구성 계층 도움말 / 설명

    부모 컨텍스트에서 자식 컨텍스트와 스프링 컨텍스트 선언

    Spring-MVC : "컨텍스트"와 "네임 스페이스"란 무엇입니까?

  2. ==============================

    2.DispatcherServlet을 실행 중이면 ContextLoaderListener를 사용할 필요가 없습니다. ContextLoader.getCurrentWebApplicationContext ()를 사용하여 WebApplicationContext에 액세스하면됩니다.

    DispatcherServlet을 실행 중이면 ContextLoaderListener를 사용할 필요가 없습니다. ContextLoader.getCurrentWebApplicationContext ()를 사용하여 WebApplicationContext에 액세스하면됩니다.

    이 이전 답변에 설명 된대로 빈 정의를 별도로 유지하십시오.

  3. from https://stackoverflow.com/questions/7833767/why-dispatcherservlet-creates-another-application-context by cc-by-sa and MIT license