179 votes

Rôle/but de ContextLoaderListener au printemps ?

Je suis l'apprentissage du printemps, qui est utilisé dans mon projet.J'ai trouvé le ContextLoaderListener entrée dans ma web.xml . Mais ne pouvait pas comprendre exactement comment il aide le développeur? Dans la doc officielle de ContextLoaderListener il dit que c'est pour commencer WebApplicationContext . Concernant WebApplicationContext , api, dit - 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 qui en interne init le WebApplicationContext ?

Selon ma compréhension, ContextLoaderListener lit le fichier de configuration spring (avec la valeur donnée contre contextConfigLocation dans web.xml), de l'analyser et de charges, le singleton bean défini dans ce fichier de configuration. De la même manière quand on veut charger un prototype de haricot, 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?

120voto

sourcedelica Points 12533

Votre compréhension est correcte. L' ApplicationContext est l'endroit où vos beans Spring live. Le but de l' ContextLoaderListener est deux fois:

  1. pour attacher le cycle de vie de l' ApplicationContext pour le cycle de vie de l' ServletContext et

  2. pour 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 pratique chose à propos de l' ServletContextListener , c'est qu'il crée un WebApplicationContext et WebApplicationContext permet d'accéder à l' ServletContext par ServletContextAware de haricots et de l' getServletContext méthode.

43voto

Vikram Points 1363

ContextLoaderListener est facultatif. Juste pour faire un point ici: vous pouvez démarrer un Printemps application sans jamais configuration ContextLoaderListener, juste un minimum de base web.xml avec DispatcherServlet.

Voici à quoi ça ressemblera:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" 
    version="2.5">
  <display-name>Some Minimal Webapp</display-name>
  <welcome-file-list>   
    <welcome-file>index.jsp</welcome-file>    
  </welcome-file-list>

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

Créez un fichier appelé dispatcher-servlet.xml et de le stocker sous WEB-INF. Depuis que nous avons mentionnés index.jsp accueil liste, ajouter ce fichier dans WEB-INF.

dispatcher-servlet.xml

Dans l' dispatcher-servlet.xml définir vos haricots:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd     
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bean1">
      ...
    </bean>
    <bean id="bean2">
      ...
    </bean>         

    <context:component-scan base-package="com.example" />
    <!-- Import your other configuration files too -->
    <import resource="other-configs.xml"/>
    <import resource="some-other-config.xml"/>

    <!-- View Resolver -->
    <bean 
        id="viewResolver" 
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
      <property 
          name="viewClass" 
          value="org.springframework.web.servlet.view.JstlView" />
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
    </bean>
</beans>

1voto

Jigar Joshi Points 116533

Il vous donnera point de crochet pour mettre un code que vous souhaitez exécuter sur application web déployer fois

0voto

Evgenyx Points 626

Votre interprétation est correcte. Je me demande pourquoi vous ne voyez pas tous les avantages de ContextLoaderListener. Par exemple, vous avez besoin de construire une usine de session (pour gérer la base de données). Cette opération peut prendre un certain 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 autre chose, mais l’avantage de l’approche du printemps, c’est que vous faites la configuration sans écrire de code.

0voto

SathishSakthi Points 1

Si nous écrivons web.xml sans ContextLoaderListener alors nous ne pouvons donner l’athuntication à l’aide de customAuthenticationProvider dans la sécurité de printemps. Parce que DispatcherServelet est le contexte de l’enfant de ContextLoaderListener, customAuthenticationProvider est la partie de parentContext qui est ContextLoaderListener. Si parent contexte ne peut pas avoir les dépendances du contexte de l’enfant. Et il est donc préférable pratique d’écrire printemps-context.xml dans contextparam au lieu de l’écrire dans l’initparam.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X