Spring - Comment faire une injection de dépendance dans votre écouteur de session

Spring - Comment faire l'injection de dépendances dans votre écouteur de session

Spring est livré avec un écouteur «ContextLoaderListener» pour activer l'injection de dépendances Spring dans l'écouteur de session. Dans ce tutoriel, il révise ceHttpSessionListener example en ajoutant une dépendance Spring injectant un bean dans l'écouteur de session.

1. Haricots de printemps

Créez un service de compteur simple pour imprimer le nombre total de sessions créées.

Fichier: CounterService.java

package com.example.common;

public class CounterService{

    public void printCounter(int count){
        System.out.println("Total session created : " + count);
    }

}

File : counter.xml - Fichier de configuration du bean.




    

2. WebApplicationContextUtils

Utilise "WebApplicationContextUtils" pour obtenir le contexte de Spring, et plus tard, vous pouvez obtenir n'importe quel bean Spring déclaré de la manière Spring normale.

Fichier: SessionCounterListener.java

package com.example.common;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SessionCounterListener implements HttpSessionListener {

     private static int totalActiveSessions;

     public static int getTotalActiveSession(){
           return totalActiveSessions;
     }

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
           totalActiveSessions++;
           System.out.println("sessionCreated - add one session into counter");
           printCounter(arg0);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
           totalActiveSessions--;
           System.out.println("sessionDestroyed - deduct one session from counter");
           printCounter(arg0);
    }

    private void printCounter(HttpSessionEvent sessionEvent){

          HttpSession session = sessionEvent.getSession();

          ApplicationContext ctx =
                WebApplicationContextUtils.
                      getWebApplicationContext(session.getServletContext());

          CounterService counterService =
                      (CounterService) ctx.getBean("counterService");

          counterService.printCounter(totalActiveSessions);
    }
}

3. L'intégration

Le seul problème est, comment votre application Web sait-elle où charger le fichier de configuration du bean Spring? Le secret se trouve dans le fichier «web.xml».

  1. Enregistrez «ContextLoaderListener» comme premier écouteur pour rendre votre application Web consciente du chargeur de contexte Spring.

  2. Configurez les «contextConfigLocation» et définissez le fichier de configuration de votre bean Spring.

Fichier: web.xml




  Archetype Created Web Application

  
    contextConfigLocation
    /WEB-INF/Spring/counter.xml
  

  
        
            org.springframework.web.context.ContextLoaderListener
        
  

  
    
            com.example.common.SessionCounterListener
        
  

  
    Spring DI Servlet Listener
    com.example.common.App
  

  
    Spring DI Servlet Listener
    /Demo
  

Fichier: App.java

package com.example.common;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class App extends HttpServlet{

  public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException{

        HttpSession session = request.getSession(); //sessionCreated() is executed
        session.setAttribute("url", "example.com");
        session.invalidate();  //sessionDestroyed() is executed

        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("

Spring Dependency Injection into Servlet Listenner

"); out.println(""); out.println(""); } }

Démarrez Tomcat et accédez à l'URL «http://localhost:8080/SpringWebExample/Demo».

sortie

sessionCreated - add one session into counter
Total session created : 1
sessionDestroyed - deduct one session from counter
Total session created : 0

Voir la sortie de la console, vous obtenez le bean de service de compteur via Spring DI et imprimez le nombre total de sessions.

Conclusion

Au printemps, le «ContextLoaderListener» est un moyen générique deintegrate Spring Dependency Injection to almost all of the web application.

Télécharger