• Spring的自动装配在session监听器失效


    先看代码

    package com.oa.listener;
    
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import com.oa.service.SystemManagementService;
    
    /**
     * 
     * @author: zhao
     * @time: 2016年5月3日
     * 
     * @description:session监听器,在session销毁的时候,执行数据库操作。更改user_login的在线状态
     * 
     */
    public class SessionListener implements HttpSessionListener {
        @Autowired
        private SystemManagementService service;
    
        @Override
        public void sessionCreated(HttpSessionEvent event) {
            HttpSession session = event.getSession();
            System.out.println("Session:" + session.hashCode());
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
            HttpSession session = event.getSession();
            String login_id = (String) session.getAttribute("id");
            if (login_id != null && !"".equals(login_id)) {
                // 更改在线状态
                session.setAttribute("id", "");
                service.doLoginAndLogout(login_id, false);
            }
            System.out.println("Session监听器运行。。。");
        }
    
    }

    本栏想的挺好的,把业务逻辑层的接口通过spring的自动装配给注入,然后用就可以了。结果发现总是报错。就说我空指针,找来找去,除了bean以外,我也没写什么东西。

    解决方法,不用注解那些东西了,我们通过上下文获取ApplicationContext,然后通过bean name获取bean。

        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
            HttpSession session = event.getSession();
            String login_id = (String) session.getAttribute("id");
            if (login_id != null && !"".equals(login_id)) {
                // 更改在线状态
                session.setAttribute("id", "");
                ApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
                SystemManagementService service=(SystemManagementService) context.getBean("systemManagementService");
                service.doLoginAndLogout(login_id, false);
            }
            System.out.println("Session监听器运行。。。");
        }
  • 相关阅读:
    过滤器
    自定义指令
    Window setTimeout() 方法
    Window setInterval()方法
    ThingJS官方案例(五):物联网室内3D定位导航,上下楼怎么办?
    基于WebGL的虚拟太阳系漫游技术实现 ThingJS 科幻片
    ThingJS官方案例(四):快速应用3D场景下的模拟导航能力
    ThingJS官方示例(三):3D标记“Marker”跳跃、闪烁和发光动画效果
    ThingJS官方示例(二):利用电子标注判断物联网设备的位置
    ThingJS 官方示例(一):禁区告警的3D电子围栏可视化
  • 原文地址:https://www.cnblogs.com/zhao307/p/5456392.html
Copyright © 2020-2023  润新知