BackGround
Nach dem Lesen von 1 2 3 4 5 6 Links Ich kam zu folgendem Ergebnis -
Da Spring mvc über standered servlets
entworfen wurde und die gleiche Funktionalität von servlet context
und application context
ermöglicht. Im Frühjahr gibt es zwei Arten von Kontext ApplicationContext
und WebApplicationContext
-
ApplicationContext
initialisieren von ContextLoaderListener
, einmalig pro Anwendung.
WebApplicationContext
geladen von pro DispatcherServlet
.
Wir können oben wie folgt verstehen: ApplicationContext
dehnt sich nach WebApplicationContext
aus also was immer stuff mit ApplicationContext
assoziiert ist am Ende ist dies ein Teil von WebApplicationContext
.
Zweifel
ApplicationContextAware
bietet an, welches context
-Objekt.
context
und container
scheint für die meisten von uns ein Synonym zu sein, möchte ich
geben Sie ein Beispiel. Sagen wir, wir haben zwei Dispatcher Servlet für
rest
und andere für mvc
.
Erster Dispatcher -
%Vor%Zweiter Dispatcher -
%Vor% als hier gibt es zwei Instanzen von WebApplicationContext
, diese
common part wird von ContextLoaderListner
wie definiert in geladen
rootContext
.
Ich bin mir nicht sicher, aber es darf nicht zwei IocContainer in einer einzigen SpringApplication geben.
BeanFactory ie SpringIocContainer ist, wo alle Bean Objekte sind
lebt, was auch immer wir mit WebApplicationContext
assoziieren
Teil des Spring-Containers, wie wird dieser Container initialisiert?
WebApplicationContext
? Ich möchte wissen wollen, wie sie beide machen
miteinander verbunden?
Und wann immer wir ctx.getBean()
haben - das gibt das Objekt vom Frühling zurück
Container, wie funktioniert diese Kommunikation zwischen Kontext und Container?
passiert?
Es gibt ein ähnliches antwort , dass die beiden gleich sind, sagt es
Spring kommt mit mehreren Container-Implementierungen, beide laden Bean-Definitionen, verbinden Beans und geben Beans auf Anfrage aus, aber ein ApplicationContext bietet viel mehr.
Also mein Punkt ist, warum Beide Bean Definitionen laden, Draht Bohnen zusammen, das ist eine Art von Überarbeitung?
Noch eine Sache, obwohl die Web-App federgesteuert ist oder nicht, es muss einen Kontext geben, den standard servlet
liefert und in der HTTP-Kommunikation verwendet wird ......
Der Frühling folgt diesem oder Frühling behandelt das auf andere Weise. Und im Frühling context
bedeutet ein just IOC container
, von dem ein Teil von DispacherServlet
geladen wird und ein Teil von ContextLoaderListner
geladen wird und erleichtern kann viel mehr wie I18N
, access to static resource
etc ..
Grundsätzlich werden in einer Feder-MVC-Anwendung die Federkontexte im Servletkontext der Webanwendung registriert. Sie können dies in der web.xml
-Datei tun, indem Sie die Spring ContextLoaderListener
oder mit der Java-Konfiguration einstellen. In den Kommentaren habe ich auf diesen Link hingewiesen, wo erklärt wird, wie dies über Java-Konfigurationsklassen geschieht:
Frühling: wo sucht '@autowired' nach Bohnen? ?
Dort können Sie sehen, wie die 'Verbindung' gemacht wird. Dann haben Sie in den Kommentaren gefragt, was dies bewirkt:
%Vor% Wenn Sie den Code dieser Klasse überprüfen, können Sie sehen, dass er den WebApplicationContext
von den Attributen des ServletContext
erhält. Diese Attribute werden bei der Initialisierung der Webanwendung festgelegt. Wenn Sie bemerken, dass in der Klasse ContextLoader
(Eltern von ContextLoaderListener
) in der Methode initWebApplicationContext
diese Attribute auf den Servlet-Kontext gesetzt werden:
Das ist in dieser Zeile gemacht:
%Vor% Wie Sie sehen können, wird es an der gleichen Stelle gespeichert, an der Sie es mit dem WebApplicationContextUtils.getWebApplicationContext(myServlet.getServletContext())
versuchen wollen:
Wie Sie sehen können, sind alle Antworten auf Ihre Zweifel in dem Code enthalten, den Spring beim Start der Webanwendung ausführt.
Ich hoffe, ich habe deine Frage beantwortet.
Für Ihren Zweifel 1
In einer Spring-Anwendung gibt es eine einzige Instanz des Kontexts, der WebAplicationCntext
pro DispatcherServlet
ist. Diese können durch eine Super-Schnittstelle ApplicationContext
-
Im Kontext bedeutet Kontext einen gerechten IOC-Container, von dem ein Teil von DispacherServlet geladen wird und ein Teil von ContextLoaderListner geladen wird und viel mehr wie I18N, Zugriff auf statische Ressourcen usw. ermöglichen kann / p>
Ihr oben beschriebenes Verständnis ist fast korrekt. Im Frühjahr Alle WebApplicationContext
-Objekte haben einen gemeinsamen Verweis, der rootContext
ist.
Diese Antwort enthält keine Antwort von doubt2
, doubt3
und why all context perform same task
.
Tags und Links java spring ioc-container spring-mvc