Wie genau sind die root-Kontext und das dispatcher-servlet-Kontext in eine Spring-MVC-web-Anwendung?
Ich studiere Spring MVC und ich habe einige Zweifel im Zusammenhang
So, ich habe diese configuration-Klasse, die bei der Konfiguration meines DispatcherServlet, die mit der Benutzer-Anforderungen:
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
//Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = ...
//Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
//Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("main", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("main/");
}
}
Ist es ziemlich klar für mich, wie der DispatcherServlet funktioniert. Meine Zweifel beziehen sich auf die Kontext Konzept.
1) Was genau repräsentieren eine Kontext? Ich denke, dass ist so etwas wie eine Reihe von Bohnen, die eine bestimmte pourpose und arbeiten zusammen in einer Umgebung. Aber ich bin absolut nicht wahr, über diese Behauptung.
2) Was ist der Unterschied zwischen den root-Kontext und die dispatcher-servlet-Kontext?
3) Aus, was ich verstehen, die Bohnen, definiert in dispatcherContext haben Zugriff auf beans definiert in rootContext (aber das Gegenteil ist nicht wahr). Warum?
Tnx
- Sie Ihre war-Datei ist der Kontext.
- Bohnen/configuraiton geladen
ContextLoaderListener
ist die root-Kontext, alles geladen, durch eineDispatcherServlet
(oderMessageDispatcherServlet
für Spring-WS) ist ein Kind-Kontext. Sie können mehrere servlets, die alle Zugriff auf den root-Kontext (enthalten sollte Sie freigegebene Ressourcen wie services, etc.). Nun, wenn Sie 10 dispatcher servlets das servlet zugegriffen werden soll, indem Sie den root-Kontext? So sind die Eltern zugänglich ist, aus dem Kind und nicht anders herum. Dies würde auch dazu führen, Probleme mit AOP, plötzlich AOP definiert durch das Kind, Einfluss der Eltern. - Tnx so viel, perfekte Erklärung. Wenn du es als Antwort werde ich es annehmen 🙂
- stackoverflow.com/questions/19619539/...
- link1 , link2 gute Erklärungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Root-Kontext
Den root-Kontext in eine Spring-Anwendung ist die
ApplicationContext
geladen wird, durch dieContextLoaderListener
. In diesem Kontext sollte die Global verfügbaren Ressourcen wie services, repositories, Infrastruktur Bohnen (DataSource
,EntityManagerFactory
s etc.) etc.Den
ContextLoaderListener
Register in diesem Kontext in derServletContext
unter dem Namenorg.springframework.web.context.WebApplicationContext.ROOT
., Wenn Sie laden eine
ApplicationContext
sich selbst und registrieren Sie es mit dem Namen oben in derServletContext
wird, dann qualifizieren Sie sich als root-Kontext.Kind-Kontext
Kind-Kontext in eine Spring-Anwendung ist die
ApplicationContext
geladen wird, durch einDispatcherServlet
(oder zum Beispiel eineMessageDispatcherServlet
in eine Spring-WS-Anwendung). In diesem Kontext soll nur die Bohnen der für Sie relevanten Kontext für Spring MVC, das wäreViewResolver
sHandlerMapping
s usw.Das servlet registriert diesem Zusammenhang in der
ServletContext
unter dem Namenorg.springframework.web.servlet.FrameworkServlet.CONTEXT.<servlet-name>
.Root <-Kind-Beziehung
Nur untergeordnete Kontexte haben Zugriff auf die parent-Kontext, denn Sie könnte mehreren untergeordneten Kontexten. Zum Beispiel in einer Spring MVC in Kombination mit Spring-WS-Anwendung. Der parent-context ist erkannt, durch die Kinder zu finden, indem Sie in der
ServletContext
mit den bekannten Namen.Wenn das root-Kontext Zugriff auf das Kind, das würde es verwenden, um Draht-Bohnen? Neben, dass, wenn das der Fall wäre, würden Sie bekommen auch überraschende Ergebnisse, wenn AOP beteiligt ist. AOP definiert, die in den untergeordneten Kontext wäre plötzlich Einfluss Bohnen konfiguriert im root-Kontext.