J’apprends le framework Spring qui est utilisé dans mon projet. J’ai trouvé l’entrée ContextLoaderListener dans mon fichier web.xml . Mais n’arrivait pas à comprendre comment cela aide un développeur?
Dans la documentation officielle de ContextLoaderListener, il est dit de démarrer WebApplicationContext . En ce qui concerne WebApplicationContext JavaDocs dire:
Interface permettant de configurer une application Web.
Mais je ne suis pas en mesure de comprendre ce que je réalise avec ContextLoaderListener qui initialise en interne WebApplicationContext ?
D’après ce que j’ai compris , ContextLoaderListener lit le fichier de configuration Spring (avec la valeur donnée par contextConfigLocation dans web.xml ), l’parsing et charge le bean singleton défini dans ce fichier de configuration. De même, lorsque nous souhaitons charger un prototype de bean , nous utiliserons le même contexte d’application Web pour le charger. Nous initialisons donc l’application Web avec ContextLoaderListener afin que nous lisions / analysions / validions le fichier de configuration à l’avance et que chaque fois que nous souhaitons injecter une dépendance, nous pouvons immédiatement le faire sans délai. Cette compréhension est-elle correcte?
Votre compréhension est correcte. ApplicationContext
est l’endroit où vos haricots de spring vivent. Le ContextLoaderListener
deux objectives:
pour lier le cycle de vie de ApplicationContext
au cycle de vie du ServletContext
et
pour automatiser la création d’ ApplicationContext
, vous n’avez donc pas besoin d’écrire du code explicite pour le créer – c’est une fonction pratique.
Une autre chose pratique à propos de ContextLoaderListener
est qu’il crée un WebApplicationContext
et que WebApplicationContext
permet d’accéder à ServletContext
via les beans ServletContextAware
et la méthode getServletContext
.
ContextLoaderListener
est facultatif . Juste pour faire un point ici: vous pouvez démarrer une application Spring sans jamais configurer ContextLoaderListener
, juste un minimum web.xml
base avec DispatcherServlet
.
Voici à quoi ça ressemblerait:
web.xml
Some Minimal Webapp index.jsp dispatcher org.springframework.web.servlet.DispatcherServlet 1 dispatcher *.do
Créez un fichier appelé dispatcher-servlet.xml
et stockez-le sous WEB-INF
. Comme nous avons mentionné index.jsp
dans la liste de bienvenue, ajoutez ce fichier sous WEB-INF
.
dispatcher-servlet.xml
Dans le dispatcher-servlet.xml
définissez vos beans:
... ...
Pour une application Spring simple, vous n’avez pas besoin de définir ContextLoaderListener
dans votre ContextLoaderListener
web.xml
; vous pouvez simplement mettre tous vos fichiers de configuration Spring dans
:
hello org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/mvc-core-config.xml, classpath:spring/business-config.xml 1
Pour une application Spring plus complexe, dans laquelle plusieurs DispatcherServlet
définis, vous pouvez disposer des fichiers de configuration Spring communs à tous les DispatcherServlet
définis dans ContextLoaderListener
:
contextConfigLocation classpath:spring/common-config.xml org.springframework.web.context.ContextLoaderListener mvc1 org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/mvc1-config.xml 1 mvc2 org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/mvc2-config.xmll 1
N’oubliez pas que ContextLoaderListener
effectue le travail d’initialisation réel pour le contexte d’application racine .
J’ai trouvé cet article très utile: Spring MVC – Contexte de l’application et contexte de l’application Web
Le blog ” But de ContextLoaderListener – Spring MVC ” donne une très bonne explication.
Selon lui, les contextes d’application sont hiérarchiques et le contexte de DispatcherSerlvet devient donc l’enfant du contexte de ContextLoaderListener. En raison de cela, la technologie utilisée dans la couche contrôleur (Struts ou Spring MVC) peut, indépendamment du contexte racine, créer ContextLoaderListener.
Lorsque vous souhaitez placer votre fichier Servlet dans votre emplacement personnalisé ou avec un nom personnalisé, plutôt que la convention d’atsortingbution de nom par défaut [servletname]-servlet.xml
et le chemin sous Web-INF/
, vous pouvez utiliser ContextLoaderListener
.
ContextLoaderListner est un écouteur Servlet qui charge tous les différents fichiers de configuration (configuration de la couche de service, configuration de la couche de persistance, etc.) dans un seul contexte d’application Spring.
Cela permet de fractionner les configurations de spring dans plusieurs fichiers XML.
Une fois les fichiers de contexte chargés, Spring crée un object WebApplicationContext basé sur la définition du bean et le stocke dans le ServletContext de votre application Web.
Fondamentalement, vous pouvez isoler le contexte de votre application racine et le contexte de l’application Web à l’aide de ContextLoaderListner.
Le fichier de configuration mappé avec le paramètre contextuel se comportera comme une configuration de contexte d’application racine. Et le fichier de configuration mappé avec le servlet du répartiteur se comportera comme un contexte d’application Web.
Dans n’importe quelle application Web, nous pouvons avoir plusieurs servlets de répartition, donc plusieurs contextes d’application Web.
Mais dans n’importe quelle application Web, nous ne pouvons avoir qu’un seul contexte d’application racine partagé avec tous les contextes d’application Web.
Nous devrions définir nos services, entités, aspects, etc. communs dans le contexte d’application racine. Et les contrôleurs, intercepteurs, etc. sont dans le contexte de l’application Web pertinente.
Un exemple web.xml est
org.springframework.web.context.ContextLoaderListener contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation example.config.AppConfig restEntryPoint org.springframework.web.servlet.DispatcherServlet contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation example.config.RestConfig 1 restEntryPoint /rest/* webEntryPoint org.springframework.web.servlet.DispatcherServlet contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation example.config.WebConfig 1 webEntryPoint /
Ici, la classe de configuration exemple.config.AppConfig peut être utilisée pour configurer des services, des entités, des aspects, etc. dans un contexte d’application racine qui sera partagé avec tous les autres contextes d’applications Web
PS: Ici, ContextLoaderListener est complètement facultatif. Si nous ne mentionnons pas ContextLoaderListener dans web.xml, AppConfig ne fonctionnera pas. Dans ce cas, nous devons configurer tous nos services et entités dans WebConfig et Rest Config.
Il vous donnera un sharepoint repère pour mettre du code à exécuter sur le temps de déploiement de l’application Web
Cet écouteur Bootstrap doit démarrer et arrêter la racine WebApplicationContext de Spring. Comme une application Web peut avoir plusieurs servlet répartiteur et que chacun possède son propre contexte d’application contenant des contrôleurs, des résolveurs de vues, des mappages de gestionnaires, etc. Vous pouvez avoir des beans de service, des beans DAO dans le contexte d’application racine et contexte d’application créé par les servlets du répartiteur).
La deuxième utilisation de cet écouteur est lorsque vous souhaitez utiliser la sécurité du spring.
Votre compréhension est correcte. Je me demande pourquoi vous ne voyez aucun avantage dans ContextLoaderListener. Par exemple, vous devez créer une fabrique de sessions (pour gérer la firebase database). Cette opération peut prendre du temps, il est donc préférable de le faire au démarrage. Bien sûr, vous pouvez le faire avec les servlets init ou quelque chose d’autre, mais l’avantage de l’approche de Spring est que vous faites de la configuration sans écrire de code.
Si nous écrivons web.xml sans ContextLoaderListener, nous ne pouvons pas donner la syntaxe en utilisant customAuthenticationProvider dans la sécurité des ressorts. DispatcherServelet étant le contexte enfant de ContextLoaderListener, customAuthenticationProvider est la partie de parentContext qui est ContextLoaderListener. Donc, le contexte parent ne peut pas avoir les dépendances du contexte enfant. Il est donc recommandé d’écrire spring-context.xml dans contextparam au lieu de l’écrire dans l’initparam.
Je crois que sa véritable utilisation vient lorsque vous voulez avoir plus de fichiers de configuration ou que vous avez un fichier xyz.xml au lieu de applicationcontext.xml par exemple
Une autre approche de ContextLoaderListener utilise ContextLoaderServlet comme ci-dessous
Classe d’écoute – Écoute un événement (par ex. Démarrage / arrêt du serveur)
ContextLoaderListener –
Les fichiers de configuration peuvent être fournis comme ceci dans web.xml
contextConfigLocation /WEB-INF/dispatcher-servlet.xml
Dans le contexte de la structure Spring, ContextLoaderListener consiste à charger les autres beans de votre application, tels que les composants de niveau intermédiaire et de niveau de données qui génèrent l’arrière de l’application.