Assoziation zwischen: SpringIocContainer | Anwendungskontext | WebApplicationContext

9

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

  1. ApplicationContextAware bietet an, welches context -Objekt.

    %Vor%
  2. 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.

  3. 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 ..

    
TheCurious 16.02.2017, 17:20
quelle

2 Antworten

0

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:

%Vor%

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(myServle‌​t.getServletContext(‌​)) versuchen wollen:

%Vor%

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.

    
mlg 21.02.2017 17:27
quelle
0

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 -

referenziert werden %Vor%

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 .

    
user4768611 25.02.2017 10:29
quelle