- Spring初学快速入门
- 安装Spring工具套件到Eclipse
- Spring快速入门
- Spring自动装配Bean
- Spring JDBC支持
- Spring JavaConfig
- Spring 依赖注入(DI)
-
Spring Bean基础
- Spring Bean引用例子
- 如何注入值到Spring bean属性
- Spring bean加载多个配置文件
- Spring内部bean实例
- Spring Bean作用域实例
- Spring集合 (List,Set,Map,Properties) 实例
- Spring ListFactoryBean实例
- Spring SetFactoryBean实例
- Spring MapFactoryBean例子
- Spring注入日期到bean属性-CustomDateEditor
- Spring PropertyPlaceholderConfigurer实例
- Spring bean配置继承
- Spring依赖检查
- Spring使用@Required注解依赖检查
- Spring自定义@Required-style注解
- Spring Bean InitializingBean和DisposableBean实例
- Spring Bean init-method 和 destroy-method实例
- Spring @PostConstruct和@PreDestroy实例
- Spring表达式语言
- Spring自动组件扫描
- Spring AOP (面向方面编程)
- Spring AOP + AspectJ框架
- Spring Hibernate支持
- Spring E-mail支持
-
Spring与其它Web框架集成
Spring依赖注入servlet会话监听器
Spring提供了一个 “ContextLoaderListener” 监听器,以使 Spring 依赖注入到会话监听器。 在本教程中,通过添加一个 Spring 依赖注入一个bean 到会话监听器修改 HttpSessionListener 例子。
1. Spring Beans
创建一个简单的计数服务来打印创建的会话总数。
File : CounterService.java
package com.zyiz.netmon; public class CounterService{ public void printCounter(int count){ System.out.println("Total session created : " + count); } }
File : counter.xml – Bean配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="counterService" class="com.zyiz.netmon.CounterService" /> </beans>
2. WebApplicationContextUtils
使用“WebApplicationContextUtils”来获得 Spring 上下文,以后可以得到任何声明Spring的Bean 在一个正常的 Spring 方式。
File : SessionCounterListener.java
package com.zyiz.netmon; 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. 集成
唯一的问题是,如何使 Web 应用程序知道在哪里可以加载 Spring bean 配置文件?秘诀是在“web.xml”文件中。
-
注册“ContextLoaderListener”作为第一个监听器,使Web应用程序知道Spring上下文加载程序。
-
配置“contextConfigLocation”,并定义Spring的bean配置文件。
File : web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/Spring/counter.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> com.zyiz.netmon.SessionCounterListener </listener-class> </listener> <servlet> <servlet-name>Spring DI Servlet Listener</servlet-name> <servlet-class>com.zyiz.netmon.App</servlet-class> </servlet> <servlet-mapping> <servlet-name>Spring DI Servlet Listener</servlet-name> <url-pattern>/Demo</url-pattern> </servlet-mapping> </web-app>
File : App.java
package com.zyiz.netmon; 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", "zyiz.net"); session.invalidate(); //sessionDestroyed() is executed PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>Spring Dependency Injection into Servlet Listenner</h1>"); out.println("</body>"); out.println("</html>"); } }
启动Tomcat,并访问 URL “http://localhost:8080/7.2-SpringDemo/"
输出结果
sessionCreated - add one session into counter Total session created : 1 sessionDestroyed - deduct one session from counter Total session created : 0
看看控制台的输出,会得到通过 Spring DI 记数服务的 bean,并打印会话的总数。
总结
在Spring中,“ContextLoaderListener”是一个通用的方法集成Spring依赖注入到几乎所有的Web应用程序。
上一篇:Spring发送带附件邮件
下一篇:没有了
分类导航
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
关注微信小程序
扫描二维码
程序员编程王