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».
-
Enregistrez «
ContextLoaderListener
» comme premier écouteur pour rendre votre application Web consciente du chargeur de contexte Spring. -
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
Téléchargez-le -SpringWeb-DI-Session-listener-Example.zip