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".
-
Registrieren Sie "
ContextLoaderListener" als ersten Listener, der Ihre Webanwendung auf den Spring Context Loader aufmerksam macht. -
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
Laden Sie es herunter -SpringWeb-DI-Session-listener-Example.zip