Rôle/Objet de ContextLoaderListener au Printemps?
Je suis en train d'apprendre Framework Spring qui est utilisé dans mon projet. J'ai trouvé le ContextLoaderListener entrée dans ma web.xml fichier. Mais ne pouvait pas comprendre comment exactement il permet à un développeur?
Dans la documentation officielle de ContextLoaderListener il dit que c'est pour commencer WebApplicationContext. Concernant WebApplicationContext JavaDocs dire:
Interface pour permettre la configuration d'une application web.
Mais je ne suis pas en mesure de comprendre ce que je veux réaliser avec ContextLoaderListener en interne qui initialise le WebApplicationContext ?
Selon ma compréhension, ContextLoaderListener lit le fichier de configuration Spring (avec la valeur donnée contre contextConfigLocation dans web.xml), l'analyse et les charges de la singleton bean définie dans ce fichier de configuration. De la même manière quand on veut charger prototype bean, nous allons utiliser la même webapplication contexte pour le charger. Nous avons donc initialiser la webapplication avec ContextLoaderListener de sorte que nous pouvons lire/analyser/valider le fichier de configuration à l'avance et à chaque fois que l'on veut injecter de la dépendance, nous pouvons d'emblée le faire sans délai. Est-ce la compréhension correcte?
- quelqu'un peut-il me faire savoir la différence entre RequestContextListener et ContextLoaderListener
Vous devez vous connecter pour publier un commentaire.
Votre compréhension est correcte. Le
ApplicationContext
est l'endroit où vos beans Spring live. Le but de laContextLoaderListener
est double:pour attacher le cycle de vie de la
ApplicationContext
pour le cycle de vie de laServletContext
etpour automatiser la création de l'
ApplicationContext
, de sorte que vous n'avez pas à écrire de code explicite faire la créer c'est une fonction de commodité.Une autre commode chose à propos de la
ContextLoaderListener
est qu'il crée unWebApplicationContext
etWebApplicationContext
permet d'accéder à laServletContext
viaServletContextAware
les haricots et lesgetServletContext
méthode.WebApplicationContext
. Sinon, il aurait besoin de créer manuellement.ContextLoaderListener
de mettre en œuvre une méthode destroy de détruire tous les haricots lorsque le conteneur web s'arrête?contextDestroyed
est appelé. Voir les docs de l'API.web.xml
. Dans mon fichier xml, il y a deux auditeursContextLoaderListener
etDispatcherServlet
. Donc je suppose qu'il n'est pas nécessaire de les deux, est-il sécuritaire de supprimerContextLoaderListener
pourquoi je demande car l'application en direct depuis 7-8 mois. web.xml ici pour votre référence.ContextLoaderListener
est facultatif. Juste pour faire un point ici: vous pouvez démarrer un Printemps application sans jamais configurationContextLoaderListener
, juste un minimum de baseweb.xml
avecDispatcherServlet
.Voici à quoi ça ressemblera:
web.xml
Créer un fichier appelé
dispatcher-servlet.xml
et de le stocker sousWEB-INF
. Depuis que nous avons mentionnésindex.jsp
d'accueil de la liste, ajouter ce fichier sousWEB-INF
.dispatcher-servlet.xml
Dans le
dispatcher-servlet.xml
définir vos haricots:Pour un simple Ressort de l'application, vous n'avez pas à définir
ContextLoaderListener
dans votreweb.xml
; vous pouvez simplement mettre tous vos Printemps des fichiers de configuration dans<servlet>
:De plus en plus complexes, le Printemps de l'application, où vous avez plusieurs
DispatcherServlet
défini, vous pouvez avoir de la commune de Printemps fichiers de configuration qui sont partagées par tous lesDispatcherServlet
définis dans leContextLoaderListener
:Il suffit de garder à l'esprit,
ContextLoaderListener
réalise l'initialisation de travail pour la racine contexte de l'application.J'ai trouvé cet article qui aide beaucoup:
Spring MVC – Contexte de l'Application vs Contexte d'Application Web
Le blog, "Le but de ContextLoaderListener – Spring MVC" donne une très bonne explication.
Selon elle, l'Application Contextes sont hierarchial et donc DispatcherSerlvet du contexte devient l'enfant de ContextLoaderListener du contexte. En raison de ce qui, la technologie utilisée dans la couche contrôleur Struts ou Spring MVC) peut indépendante de la racine de contexte créé ContextLoaderListener.
Lorsque vous voulez mettre votre Servlet fichier dans votre emplacement personnalisé ou avec nom personnalisé, plutôt que la valeur par défaut convention de nommage
[servletname]-servlet.xml
et le chemin d'accès en vertu deWeb-INF/
,alors vous pouvez utiliserContextLoaderListener
.ContextLoaderListner est un Servlet auditeur qui se charge de tous les différents fichiers de configuration (service de configuration de la couche, la couche de persistance de configuration, etc) en un seul printemps contexte de l'application.
Cela permet de diviser le printemps des configurations sur plusieurs fichiers XML.
Une fois le contexte fichiers sont chargés, Printemps crée un WebApplicationContext objet basé sur le haricot définition et la stocke dans le ServletContext de votre application web.
Fondamentalement, vous pouvez isoler votre racine de contexte de l'application et du contexte d'application web à l'aide de ContextLoaderListner.
Le fichier de configuration mappé avec le contexte param va se comporter comme racine de contexte de l'application de configuration. Et le fichier config mappé avec répartiteur de servlet va se comporter comme contexte d'application web.
Dans n'importe quelle application web que nous pouvons avoir plusieurs répartiteur de servlets, afin de multiples application web contextes.
Mais dans n'importe quelle application web que nous pouvons avoir qu'une seule racine de contexte de l'application qui est partagé avec toutes les application web contextes.
Nous devons définir notre commune, les services, les entités, les aspects etc dans la racine de contexte de l'application. Et les contrôleurs, les intercepteurs etc sont pertinentes dans le contexte de l'application web.
Un échantillon web.xml est
Ici config exemple de classe.config.AppConfig peut être utilisé pour configurer les services, les entités, les aspects etc dans la racine de contexte de l'application qui sera partagé avec tous les autres application web contextes (par exemple ici, nous avons deux contexte d'application web config classes RestConfig et WebConfig)
PS: Ici ContextLoaderListener est totalement facultatif. Si nous ne mentionnerons pas les ContextLoaderListener dans web.xml ici, AppConfig ne fonctionnera pas. Dans ce cas, il est nécessaire de configurer l'ensemble de nos services et entités dans le WebConfig et le Reste de la Config.
Cette amorce de l'écouteur est de démarrage et d'arrêt du Printemps racine WebApplicationContext. Une application web peut avoir plusieurs répartiteur de servlet et chacun ayant son propre contexte de l'application contenant des contrôleurs, vue résolveur, mappages de gestionnaires, etc, Mais vous pouvez avoir un service de haricots, de DAO les haricots dans la racine de contexte de l'application et que vous souhaitez utiliser dans tous les enfant de contexte de l'application(application de contexte créé par le dispatcher les servlets).
2ème utilisation de cet écouteur est quand vous voulez utiliser le printemps de sécurité.
Il vous donnera un point de crochet pour mettre un peu de code que vous voulez exécuter sur l'heure du déploiement de l'application web
Votre compréhension est correcte. Je me demande pourquoi vous ne voyez pas d'avantages dans ContextLoaderListener. Par exemple, vous avez besoin pour construire une fabrique de session (pour gérer la base de données). Cette opération peut prendre un certain temps, de sorte qu'il est mieux de le faire au démarrage. Bien sûr, vous pouvez le faire avec l'init des servlets ou quelque chose d'autre, mais l'avantage du Printemps approche, c'est que vous faites de configuration sans avoir à écrire de code.
Si nous écrire web.xml sans ContextLoaderListener alors nous ne pouvons pas donner la athuntication à l'aide de customAuthenticationProvider au printemps de sécurité. Parce que DispatcherServelet est l'enfant du contexte de ContextLoaderListener, customAuthenticationProvider est la partie de parentContext qui est ContextLoaderListener. Afin Contexte parent ne peut pas avoir les dépendances de l'enfant contexte. Et donc, il est préférable d'écrire spring-context.xml dans contextparam plutôt que de l'écrire dans le initparam.
Je crois que son utilisation réelle vient quand vous voulez avoir plus d'un des fichiers de configuration ou vous avez xyz.xml fichier au lieu de applicationcontext.xml pour exemple
<context-param><param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/training-service.xml,
/WEB-INF/training-data.xml</param-value>
</context-param>
Une autre approche de ContextLoaderListener est à l'aide de ContextLoaderServlet comme ci-dessous
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Classe écouteur - Écoute sur un événement (par exemple.. Serveur de démarrage/arrêt)
ContextLoaderListener -
Les fichiers de Configuration peuvent être fournis comme cela dans web.xml
Dans le cadre du framework spring but de ContextLoaderListener est à la charge de l'autre les haricots dans votre application, tels que la couche intermédiaire et de la couche de données de composants que le lecteur de la fin de l'application.