2013-09-08 18 views
19

In Spring MVC gibt es zwei Kontexte. Einer ist der Anwendungskontext oder der globale Kontext, der von ContextLoaderListener gebootet wird. Es nimmt alle Konfigurationsdateien, die in contextConfigLocation Parameter erwähnt werden.Warum benötigt Spring MVC mindestens zwei Kontexte?

Wenn Sie jetzt Spring MVC verwenden, ist das Dispatcher-Servlet erforderlich, das einen anderen Container bootet, der auch als Webanwendungscontainer bezeichnet wird. Dieser Container verwendet den globalen Container als übergeordneten Container.

Bei der Integration von Struts1 mit Feder gibt es nur einen Kontext. Warum braucht Federmvc zwei? Ist es möglich, nur einen Kontext bei der Verwendung von Feder-Mvc zu verwenden?

danke!

Antwort

12

Stellen Sie sich vor, Sie hätten zwei separate Dispatcher, von denen jeder einen anderen Zweck erfüllt und jeder seine eigenen Abhängigkeiten hat. Sie würden diese unabhängig voneinander mit separaten Kontexten konfigurieren.

Wenn eine gemeinsame Konfiguration vorhanden ist, kann dies im globalen Kontext erfolgen.

Ich denke nicht, dass es möglich ist, nur einen Kontext mit DispatcherServlet zu haben, da es seinen eigenen Kontext erstellt und es mit dem übergeordneten Kontext (über die FrameworkServlet-Oberklasse) verknüpft.

FrameworkServlet.createWebApplicationContext

14

einen Stammwebs Anwendungskontext und ein Kind Servletkontext zu haben, ist nur eine Option. Wenn Sie wissen, dass Ihre Anwendung kein zweites Servlet haben wird, ist es wahrscheinlich einfacher, einen einzigen Spring-Kontext für die gesamte Webanwendung zu haben.

können Sie das Setup erreichen, indem er einfach die ContextLoaderListener zu entfernen (und die contextConfigLocation context-param Begleit) von Ihrem web.xml und alle Bean-Definitionen in das XML-Bewegen des Servlet-Kontext definieren ([servlet-name]-servlet.xml).

Dies ist möglich, weil die FrameworkServlet (Super-Klasse von DispatcherServlet) nicht kümmert, wenn es einen Stammanwendungskontext beim Erstellen des Servlet-Kontexts gibt. Es gibt nur den Stammkontext als Elternteil weiter, falls verfügbar. Siehe related code here.

5

prüfen diese Antwort About multiple containers in spring framework

Ja, können Sie nur einen Zusammenhang haben.

Für die Wiederverwendung von Code wäre es besser, Dienste im Anwendungskontext als im WebApplicationContext zu isolieren. Dies ist jedoch kein Zwang. Sie können nur webApplicationcontext speichern.

Verwandte Themen