Konteksty root i child Zanim zaczniesz czytać dalej, zrozum, że -
Wiosna może mieć jednocześnie wiele kontekstów. Jeden z nich będzie kontekstem głównym, a wszystkie inne konteksty będą kontekstami potomnymi.
Wszystkie konteksty potomne mają dostęp do komponentów bean zdefiniowanych w kontekście głównym; ale przeciwieństwo nie jest prawdą. Kontekst główny nie może uzyskać dostępu do komponentów bean kontekstów potomnych.
ApplicationContext:
applicationContext.xml to konfiguracja kontekstu głównego dla każdej aplikacji internetowej. Spring ładuje plik applicationContext.xml i tworzy ApplicationContext dla całej aplikacji. W każdej aplikacji internetowej będzie tylko jeden kontekst aplikacji. Jeśli nie zadeklarujesz jawnie nazwy pliku konfiguracji kontekstu w web.xml przy użyciu parametru contextConfigLocation, Spring wyszuka plik applicationContext.xml w folderze WEB-INF i wyrzuci wyjątek FileNotFoundException, jeśli nie może znaleźć tego pliku.
ContextLoaderListener Wykonuje rzeczywistą pracę inicjalizacyjną dla kontekstu aplikacji głównej. Odczytuje parametr kontekstu „contextConfigLocation” i przekazuje jego wartość do instancji kontekstu, analizując je na potencjalnie wiele ścieżek plików, które można oddzielić dowolną liczbą przecinków i spacji, np. „WEB-INF / applicationContext1.xml, WEB-INF / applicationContext2.xml ”. ContextLoaderListener jest opcjonalne. Dla przypomnienia: możesz uruchomić aplikację Spring bez konfigurowania ContextLoaderListener, wystarczy podstawowy minimalny plik web.xml z DispatcherServlet.
DispatcherServlet DispatcherServlet jest zasadniczo serwletem (stanowi rozszerzenie HttpServlet), którego głównym celem jest obsługa przychodzących żądań WWW zgodnych ze skonfigurowanym wzorcem adresu URL. Przyjmuje przychodzący identyfikator URI i znajduje właściwą kombinację kontrolera i widoku. Więc to jest przedni kontroler.
Podczas definiowania DispatcherServlet w konfiguracji sprężynowej, udostępniasz plik XML z wpisami klas kontrolerów, odwzorowaniami widoków itp. Za pomocą atrybutu contextConfigLocation.
WebApplicationContext Oprócz ApplicationContext w jednej aplikacji internetowej może istnieć wiele elementów WebApplicationContext. Krótko mówiąc, każdy DispatcherServlet powiązany z pojedynczym WebApplicationContext. Plik xxx-servlet.xml jest specyficzny dla serwletu DispatcherServlet, a aplikacja internetowa może mieć więcej niż jeden serwlet DispatcherServlet skonfigurowany do obsługi żądań. W takich scenariuszach każdy DispatcherServlet miałby skonfigurowany oddzielny xxx-servlet.xml. Jednak plik applicationContext.xml będzie wspólny dla wszystkich plików konfiguracyjnych serwletu. Spring domyślnie wczyta plik o nazwie „xxx-servlet.xml” z folderu WEB-INF aplikacji webowych, gdzie xxx to nazwa serwletu w web.xml. Jeśli chcesz zmienić nazwę tej nazwy pliku lub zmienić lokalizację, dodaj parametr inicjacji z wartością contextConfigLocation jako nazwę parametru.
Porównanie i relacja między nimi:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener tworzy kontekst aplikacji głównej. Pozycje DispatcherServlet tworzą jeden kontekst aplikacji podrzędnej dla każdego wpisu serwletu. Konteksty potomne mogą uzyskiwać dostęp do komponentów bean zdefiniowanych w kontekście głównym. Fasola w kontekście głównym nie może uzyskać dostępu do fasoli w kontekstach potomnych (bezpośrednio). Wszystkie konteksty są dodawane do ServletContext. Dostęp do kontekstu głównego można uzyskać za pomocą klasy WebApplicationContextUtils.
Po przeczytaniu dokumentacji Spring, rozumiem:
a) Konteksty aplikacji są hierarchiczne, podobnie jak WebApplicationContexts. Zapoznaj się z dokumentacją tutaj.
b) ContextLoaderListener tworzy główny kontekst aplikacji internetowej dla aplikacji internetowej i umieszcza go w ServletContext. Ten kontekst może być używany do ładowania i rozładowywania ziaren sterowanych sprężynami w zależności od technologii używanej w warstwie kontrolera (Struts lub Spring MVC).
c) DispatcherServlet tworzy swój własny WebApplicationContext, a programy obsługi / kontrolery / programy rozpoznające widok są zarządzane przez ten kontekst.
d) Gdy ContextLoaderListener jest używany w tandemie z DispatcherServlet, najpierw tworzony jest główny kontekst aplikacji WWW, jak wspomniano wcześniej, a także jest tworzony przez DispatcherSerlvet kontekst potomny i dołączany do głównego kontekstu aplikacji. Zapoznaj się z dokumentacją tutaj.
Kiedy pracujemy z Spring MVC i używamy Springa również w warstwie usług, udostępniamy dwa konteksty aplikacji. Pierwsza jest konfigurowana za pomocą ContextLoaderListener, a druga za pomocą DispatcherServlet
Ogólnie rzecz biorąc, zdefiniujesz wszystkie komponenty bean powiązane z MVC (kontroler i widoki itp.) W kontekście DispatcherServlet, a wszystkie komponenty bean przekrojowe, takie jak bezpieczeństwo, transakcje, usługi itp. W kontekście głównym, za pomocą ContextLoaderListener.
Więcej informacji znajdziesz tutaj:
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html