Spring - So führen Sie die Abhängigkeitsinjektion in Ihrem Sitzungslistener durch

Spring - So fügen Sie Abhängigkeiten in Ihren Sitzungslistener ein

Spring wird mit einem Listener "ContextLoaderListener" geliefert, um die Spring-Abhängigkeitsinjektion in den Sitzungs-Listener zu ermöglichen. In diesem Lernprogramm werden dieseHttpSessionListener example durch Hinzufügen einer Spring-Abhängigkeitsinjektion einer Bean in den Sitzungslistener überarbeitet.

1. Frühlingsbohnen

Erstellen Sie einen einfachen Zählerdienst, um die Gesamtzahl der erstellten Sitzungen zu drucken.

Datei: CounterService.java

package com.example.common;

public class CounterService{

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

}

File : counter.xml - Bean-Konfigurationsdatei.




    

2. WebApplicationContextUtils

Verwendet "WebApplicationContextUtils", um den Kontext des Frühlings abzurufen. Später können Sie jede deklarierte Spring-Bohne auf normale Spring-Weise abrufen.

Datei: 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. Integration

Das einzige Problem ist, wie Ihre Webanwendung weiß, wo die Spring Bean-Konfigurationsdatei geladen werden muss. Das Geheimnis liegt in der Datei "web.xml".

  1. Registrieren Sie "ContextLoaderListener" als ersten Listener, der Ihre Webanwendung auf den Spring Context Loader aufmerksam macht.

  2. Konfigurieren Sie die "contextConfigLocation" und definieren Sie die Bean-Konfigurationsdatei Ihres Spring.

Datei: 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
  

Datei: 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(""); } }

Starten Sie Tomcat und greifen Sie auf die URL „http://localhost:8080/SpringWebExample/Demo“ zu.

Ausgabe

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

Sehen Sie sich die Konsolenausgabe an, erhalten Sie die Counter Service Bean über Spring DI und drucken Sie die Gesamtzahl der Sitzungen.

Fazit

Im Frühjahr ist "ContextLoaderListener" ein generischer Weg zuintegrate Spring Dependency Injection to almost all of the web application.

Herunterladen