Java 的监听器中使用 Spring 框架中的某些 service
来源:互联网 发布:伊本白图泰 知乎 编辑:程序博客网 时间:2024/05/19 14:18
为方便有时希望在监听器中使用 Spring 框架中的某些 service,但是因为监听器属于sevlet容器,不属于 Spring 框架的管理范围,所以如果期望监听器中直接使用 @Resource 等注解加载 service 的做法是错误,包 null 指针异常,那如果图简单想直接使用,正确做法是实现 Spring 的 ServletContextListener 接口,在 Spring 上下文初始化事件完成后,再查找 Spring 框架中(上下文)的对应的 service 然后再提供给监听器使用,代码如下:
package com.xxx.yyy.listener;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;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.WebApplicationContext;import com.xxx.yyy.entity.Member;import com.xxx.yyy.module.service.MemberService;/** * @author shenzhenNBA * @since 2017.04.17 *///@Slf4jpublic class AppSessionListener implements ServletContextListener,HttpSessionListener { //@Resource //监听器属于sevlet容器而非spring管理范围,故不能使用注解方式加载相关实例 private MemberService memberService;@Overridepublic void sessionCreated(HttpSessionEvent hse) {HttpSession session = hse.getSession(); // session createed to do...}@Overridepublic void sessionDestroyed(HttpSessionEvent hse) {HttpSession session = hse.getSession(); try {String memberId = (String)session.getAttribute("memberId");Member member = memberService.findByMemberId(memberId);//to do more when session destroyed...} catch (Exception e) {//log.error("异常!", e);}}@Overridepublic void contextInitialized(ServletContextEvent sce) {ServletContext servletContext = sce.getServletContext();ApplicationContext context = (ApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); //initialize service when spring context initialized,//建立对应的service当spring上下文初始化之后//使用spring框架中已经初始化的memberServicememberService = (MemberService)context.getBean(MemberService.class);//to do more...}@Overridepublic void contextDestroyed(ServletContextEvent sce) {// TODO Auto-generated method stub}}
web.xml 配置 listener
<listener> listener-class>com.xxx.yyy.listener.AppSessionListener</listener-class> </listener>
0 0
- Java 的监听器中使用 Spring 框架中的某些 service
- spring项目中使用监听器时获取spring中注入的service
- spring项目中使用监听器时获取spring中注入的service
- 在Listener(监听器)定时启动的TimerTask(定时任务)中使用Spring@Service注解的bean
- Java中监听器的使用
- Spring 4.2框架中注释驱动的事件监听器详解
- Spring 4.2框架中注释驱动的事件监听器详解
- Spring 4.2框架中注释驱动的事件监听器详解
- java web中监听器的使用
- spring项目中,web.xml中的 ContextLoaderListener监听器的原理
- Spring框架中普通的类如何调用注解Service中的方法
- Java监听器的使用
- Spring中监听器的详解
- Spring中监听器的详解
- Spring中监听器的详解
- Spring中监听器的详解
- Spring中监听器的详解
- Spring中监听器的详解
- Python函数调用的下划线缺省参数“_”问题
- (原创)分享自己写的几个工具类(三)Toast和Log管理类
- 使用cookie完成用户自动登录
- HTML CSS + DIV实现整体布局
- django Rest Framework 系列 6
- Java 的监听器中使用 Spring 框架中的某些 service
- Spring--IoC--创建BeanFactory容器
- java实现快速排序算法
- Hibernate访问缓慢导致网页无法刷新浏览
- 二叉搜索树的实现
- 动态规划专题总结
- php过滤敏感词
- 电子检票过杆
- 1045. 快速排序(25)