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