Rôle / object de ContextLoaderListener au spring?

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:

    1. pour lier le cycle de vie de ApplicationContext au cycle de vie du ServletContext et

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

    entrer la description de l'image ici 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

    contextConfigLocation /WEB-INF/training-service.xml, /WEB-INF/training-data.xml

    Une autre approche de ContextLoaderListener utilise ContextLoaderServlet comme ci-dessous

    context org.springframework.web.context.ContextLoaderServlet 1

    Classe d’écoute – Écoute un événement (par ex. Démarrage / arrêt du serveur)

    ContextLoaderListener –

    1. Écoute pendant le démarrage / l’arrêt du serveur
    2. Prend les fichiers de configuration Spring comme entrée et crée les beans conformément à la configuration et les prépare (détruit le bean pendant l’arrêt)
    3. 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.