Interfejs org.springframework.context.ApplicationContext
przedstawia pojemnik Wiosna IoC i jest odpowiedzialny za uruchamianiu, konfiguracja i montaż wspomnianych fasoli. Kontener otrzymuje instrukcje dotyczące obiektów, które można utworzyć, skonfigurować i złożyć, czytając metadane konfiguracyjne. Metadane konfiguracyjne są reprezentowane w adnotacjach XML, Java lub kodu Java.
W ramach Web MVC, każdy ma swój własny DispatcherServlet WebApplicationContext, która dziedziczy wszystkie fasole już zdefiniowane w WebApplicationContext korzeń. Te odziedziczone komponenty bean mogą być nadpisywane w zakresie specyficznym dla serwletu i można definiować nowe fasole specyficzne dla zakresu od lokalnie dla danej instancji Serwletu.
w Spring Web Applications, istnieją dwa rodzaje opakowania, każdy z który jest skonfigurowany i zainicjowany inaczej. Jednym z nich jest "Kontekst aplikacji", a drugim jest "Kontekst aplikacji internetowej". Najpierw porozmawiajmy o "Kontekście aplikacji".Kontekst aplikacji jest pojemnik zainicjowany przez ContextLoaderListener lub ContextLoaderServlet zdefiniowanego w web.xml i konfiguracji będzie wyglądać mniej więcej tak:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:*-context.xml</param-value>
</context-param>
W powyższej konfiguracji, pytam wiosna załadować wszystkie pliki z Ścieżka klasy pasująca do * -context.xml i utwórz z niej kontekst aplikacji . Kontekst ten może na przykład zawierać komponenty , takie jak usługi transakcyjne warstwy pośredniej, obiekty dostępu do danych lub inne obiekty, które mogą być przydatne (i ponownie użyte) w aplikacji . W aplikacji będzie jeden kontekst aplikacji.
Innym kontekstem jest kontekst "Kontekst aplikacji internetowej", który jest kontekstem kontekstu aplikacji dla dziecka. Każdy serwer DispatcherServlet zdefiniowany w aplikacji WWW wiosennej będzie mieć powiązany obiekt WebApplicationContext o nazwie . Inicjalizacji WebApplicationContext dzieje się tak:
<servlet>
<servlet-name>platform-services</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:platform-services-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
podać nazwę pliku konfiguracyjnego wiosennej jako parametr inicjalizacji serwletu . Ważne jest, aby pamiętać, że nazwa XML musi być z formularza -servlet. xml. W tym przykładzie nazwa serwletu to usługi platformy , dlatego nazwa naszego pliku XML musi być platform-service-servlet.xml. Niezależnie od tego, jakie fasole są dostępne w ApplicationContext, można uzyskać od każdego WebApplicationContext numer . Najlepszą praktyką jest utrzymanie wyraźnej separacji między usługami warstwy pośredniej, takimi jak logika biznesowa komponenty i klasy dostępu do danych (które są zwykle zdefiniowane w ApplicationContext) i komponenty związane z WWW, takie jak kontrolery i widoki rozpoznawania nazw (które są zdefiniowane w WebApplicationContext na serwlet Dispatcher).
Nie tworzą one dwóch różnych instancji kontenera, a raczej dwóch różnych kontekstów aplikacji. –
Zobacz [ten post] (http: // stackoverflow.com/q/7774295/1679863) –
Po latach przeczytałem źródłowy kod źródłowy. Teraz mogę powiedzieć: 1) tak, istnieją dwie instancji ApplicationContext (każda instancja zawiera instancję beanFactory) 2) instancja warstwy mvc jest podrzędna i zachowuje odwołanie do instancji nadrzędnej. 3) komponenty bean w instancji nadrzędnej mogą być używane przez element potomny, ale komponenty bean w katalogu potomnym nie mogą być używane przez element nadrzędny. – lovespring