tleSkojarzenie między: SpringIocContainer | ApplicationContext | WebApplicationContext
Po przeczytaniu z 123456 Linki dotarłem następujące conclusion-
jak wiosny MVC zaprojektowany przez standered servlets
i ułatwiać samą funkcjonalność servlet context
i application context
.W wiosną istnieje dwa rodzaje kontekstów ApplicationContext
i WebApplicationContext
-
ApplicationContext
Inicjowanie przez ContextLoaderListener
, jedno wystąpienie na aplikację. WebApplicationContext
załadowany przez za DispatcherServlet
.
Możemy zrozumieć, jak ten powyżej ApplicationContext
biegnie przez WebApplicationContext
więc co kiedykolwiek rzeczy związane z ApplicationContext
w końcu jest to część WebApplicationContext
.
Wątpliwości
ApplicationContextAware
ofert, którecontext
przedmiot.public class SomeThing implements ApplicationContextAware{ @Override public void setApplicationContext(ApplicationContext ctx) throws BeanException{ //this context object is `ApplicationContext` or `WebApplicationContext`? } }
context
icontainer
wydaje synonimy dla większości z nas, chcę dać example.Let że mamy dwa dyspozytora serwletu jeden dlarest
i inne dlamvc
.Pierwszy Dyspozytor -
public class RestInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/rest/*" }; } }
drugie Dyspozytor -
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/mvc/*" }; } }
niż tutaj jest tylko jeden przypadek
WebApplicationContext
ci, wspólną częścią jest ładowany przezContextLoaderListner
jak definiować wrootContext
.Nie jestem pewien, ale nie może być 2 IocContainer w jednym SpringApplication.
BeanFactory tj SpringIocContainer jest, gdzie wszystkie obiekty fasola życie, jakie kiedykolwiek obiektów, które kojarzy się z
WebApplicationContext
jest część wiosennego pojemnika, jak to pojemnik zainicjowane przezWebApplicationContext
? Chcę chcą wiedzieć, w jaki sposób oba są powiązane ze sobą?I kiedy zrobiliśmy
ctx.getBean()
- ten obiekt zwraca z kontenera wiosna , w jaki sposób odbywa się ta komunikacja między kontekstem a kontenerem ?
Jest podobny answer że zaprzecza oba są takie same, to mówi
Wiosna przychodzi z kilku wdrożeń kontenerowych, obie definicje fasoli obciążenia drutu fasola razem i dozować fasolę na żądanie, ale ApplicationContext oferuje znacznie więcej.
Tak więc chodzi mi o to, dlaczego obie definicje fasoli ładunkowej, fasola z drutu razem, to jest rodzaj przeróbki?
Jeszcze jedno chociaż web-app jest wiosna napędzane czy nie, musi istnieć kontekst który standard servlet
zapewnia i wykorzystywane w komunikacji HTTP ......
Wiosna Wynika to czy wiosna obsługuje to w inny manner.And wiosną context
oznacza tylko IOC container
, których pewna część jest obciążona DispacherServlet
niektóre części jest ładowany przez ContextLoaderListner
i może ułatwiać znacznie więcej, tak jak I18N
, access to static resource
itp ..
"WebApplicationContext" to "ApplicationContext". Zarówno 'ContextLoaderLIstener' i' DispatcherServlet' ładują instancję 'WebApplicationContext' (która faktycznie jest interfejsem). Istnieje tylko "ApplicationContext", niezależnie od tego, czy jest on powiązany z siecią czy nie. "ApplicationContext" jest kontenerem. –
@ M.Deinum Jak zauważyłeś, istnieje jeden "kontekst" na aplikację, istnieje wiele białych dokumentów, które wyjaśniły istnienie obu, niektóre z nich zostały wymienione w pytaniu. Co więcej, jeśli zainicjalizujesz swój kontekst przez 'DispatcherServlet', tzn. Nie 'ContextLoaderListner' i wywołaj zabezpieczenie sprężyny' "spowoduje to' IllegalStateException: No ApplicationContext found: ' –
Nie nigdzie nie wskazałem, że istnieje jeden kontekst ... Ale tylko wiosna ma pojęcie "ApplicationContext". Które może być typu 'WebApplicationContext'. Może być 1 lub 100. Co mi zasugerował, że zarówno 'ContextLoaderListener' i' DispatcherServlet' ładują 'WebApplicationContext'. "ContextLoaderLIstener" ładuje kontekst nazywany ogólnie kontekstem głównym, do którego również mają dostęp filtry. Możesz także zrobić to (jeśli masz jeden 'DispatcherServlet', który ujawni ten kontekst jako główny (i na ogół to, co ludzie zapominają, prowadząc do problemu, na który wskażecie)). –