Ladereihenfolge contextConfigLocation in web.xml der Spring-Servlet-Projekt
Nehme an, dass ich eine Spring Java Projekt, und ich bin versucht, konfigurieren Sie es als ein web-server servlet. Hier ist eine abgespeckte version des web.xml Datei:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/generalApplicationContext.xml
</param-value>
</context-param>
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/specificApplicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>my-servlet</servlet-name>
<url-pattern>/foo/*</url-pattern>
</servlet-mapping>
Die wichtige Sache zu beachten ist hier, dass ich angegeben habe, zwei XML-Dateien geladen werden. Man ist sich allgemein für meine gesamte Anwendung, während der andere ist spezifisch für die "mein-servlet" - servlet. Für ein setup mit nur einem servlet-mapping, das würde keinen Sinn machen. Aber mein Projekt hat mehrere servlet-mappings und jeder hat spezifische Feder-Einstellungen zu Ihnen.
Meine Frage: Die contextConfigLocation wird zuerst geladen werden, bis zum Frühjahr? Wird es das generalApplicationContext.xml oder wird es das specificApplicationContext.xml? Noch wichtiger ist, wird die Reihenfolge des Ladens auch eine Rolle? Von meine debugging-Bemühungen, es scheint offensichtlich, dass es funktioniert, weil ich bekomme unterschiedliche Fehler bei mir bewegen sich einige unabhängige Spring-Konfiguration aus einer Datei in die andere.
NB:Ob oder nicht, mit mehreren spring-Konfigurationen für mehrere servlet-mappings ist eine gute Praxis ist umstritten. Dasselbe gilt für die Verwendung von XML-config anstatt der neuen Java-config. Aber das ist nicht das, was ich bin versucht zu Fragen, hier. Lassen Sie uns versuchen zu konzentrieren, auf meine wichtigste Frage.
InformationsquelleAutor der Frage ecbrodie | 2014-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
generalApplicationContext.xml
ist derjenige, der zuerst geladen werden, weil es dieApplicationContext
geladen mit derContextLoaderListener
specificApplicationContext.xml
ist eigentlich ein Kind Rahmen der Oben geladengeneralApplicationContext.xml
und es wird einWebApplicationContext
Und ja die Ladereihenfolge egal. Denn wenn der parent-context geladen wird, werden alle benötigten Abhängigkeiten erfüllt sein müssen.
InformationsquelleAutor der Antwort shazin
Den unteren Teil lädt das Kontext-Datei und erstellen Sie die Datei ApplicationContext. In diesem Kontext könnte beispielsweise enthalten Komponenten wie middle-tier-Transaktions-services, data-access-Objekte oder andere Objekte, die Sie möglicherweise verwenden möchten (und Wiederverwendung) in der gesamten Anwendung. Gibt es ein application context pro Applikation.
Den anderen Kontext ist die WebApplicationContextdie die Kind context der application context. Jeder
DispatcherServlet
definiert Frühling web-Anwendung über eine zugeordneteWebApplicationContext
. Die Initialisierung desWebApplicationContext
geschieht wie folgt:Weitere Informationen finden Sie diese und diese
InformationsquelleAutor der Antwort Ankur Singhal
Welchen besseren Weg, um tatsächlich die Feder debug-Protokolle erzählen Sie selbst die Reihenfolge.
Wenn Sie möchten, um in den code können Sie auch einen Blick auf die
org.springframework.web.servlet.FrameworkServlet
(DispatcherServlet
erweitert diese Klasse) aktivieren Sie Einfach den logger"org.springframework.web.servlet"
zu debug-level in Ihrem bevorzugten logging frameworkIst hier, wie die Protokolle in der Regel Aussehen - klar die root-Kontext wird als erstes geladen und als parent für den Kontext bietet - die
servlet-Kontext geladen weiter.
InformationsquelleAutor der Antwort Shailendra
Wenn Sie mit ContextLoaderListener in Ihrem web.xml der Frühling lädt die generalApplicationContext.xml ersten. Dadurch wird der Bohnen und Ihnen alle Servlets und Filter. Diese xml sollte die gemeinsamen Klassen, die Bohnen, die in Ihrer Anwendung verwendet.
Später Frühling-container lädt die specificApplicationContext.xmldenn Sie haben Last auf startup in der servlet-Konfiguration. Wenn Sie nicht angeben, die geladen auf start-up, das specificApplicationContext.xml wird geladen, wenn das ersten Anfrage kommt auf deine Anwendung mit den spezifischen url-pattern.
Ihre Frage, wenn Sie sich bewegen Sie springconfig aus einer config zum anderen wird sich das ändern, die Anwendung der Verfügbarkeit von Ressourcen, um die container. Wenn Sie geben Sie die Controller-Bohnen generalApplicationContext.xml und Sie don ' T geben Sie diese im specificApplicationContext.xml dann ist dein DispatcherServlet finden pflegt die Zuordnungen, so werden Sie sehen, 404-Fehler.
Wenn Sie wollen, um einige bean-Objekte on-demand können Sie erstellen Sie eine weitere servlet-config laden, die bestimmte specificConfigurationFile2.xml und anzeigen, um die url-Muster.
InformationsquelleAutor der Antwort Srinivas Rampelli