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监听器运行。。。");
    }
时间: 2024-07-29 17:25:29

Spring的自动装配在session监听器失效的相关文章

Spring之自动装配bean

Spring之自动装配bean 最近学习Spring框架,参考资料是Spring IN ACTION----第一张内容飘过去~~ 从第二章的自动装配bean开始,不过学习Spring核心最重要的还是ioc的注入模式吧! 书上是这么说的----(概念问题,哈哈),首先普及几个概念 --------------------------------------------------------------------------------------------------------------

spring中自动装配bean

首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component public class TestBean{ …… } 开启组件扫描spring才能自动装配bean,创建一个@ComponentScan注解的类 package soundsystem: import org.springframework.context.annotation.componentS

spring的自动装配,骚话@Autowired的底层工作原理

前言 开心一刻 十年前,我:我交女票了,比我大两岁.妈:不行!赶紧分! 八年前,我:我交女票了,个比我小两岁,外地的.妈:你就不能让我省点心? 五年前,我:我交女票了,市长的女儿.妈:别人还能看上你?分了吧! 今年,我挺着大肚子踏进家门.妈:闺女啊,你终于开窍了 ! 前情回顾 Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现中讲到了spring对BeanPostProcessor的底层支持,并且知道了BeanPostProcessor的两个方法:postProce

Eureka 系列(03)Spring Cloud 自动装配原理

Eureka 系列(03)Spring Cloud 自动装配原理 [TOC] 本文主要是分析 Spring Cloud 是如何整合 Eureka 的,但不会具体分析 Eureka 的源码,之后的文章会对 Eureka 的源码做一个比较具体的分析. 1. Eureka Client 自动装配 org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.netflix.eureka.

spring boot 自动装配的实现原理和骚操作,不同版本实现细节调整,debug 到裂开......

开篇说明: 注解本身并没有什么实际的功能(非要说标记也是一个“实际”的功能的话,也可以算吧),隐藏在背后的注解处理器才是实现注解机制的核心.本篇将从这两个层面出发探索 spring boot 自动装配的秘密,并使用 spring boot 的自动装配机制来实现自动装配. 本次代码已经放到 github:https://github.com/christmad/code-share/tree/master/spring-boot-config-practice 代码中主要是做了 @Configur

Spring -- Bean自动装配&Bean之间关系&Bean的作用域

Bean的自动装配 Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 的 autowire 属性里指定自动装配的模式 有以下几种自动装配的类型: byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配. byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同. constructor(通过构造器自动装配):

3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/

1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 ->byType(根据类型自动进行装配):若IOC容器里需要有多个与目标Bean类型一样的Bean,在这种情况子下,Spring无法判定那个Bean合适,所以不能执行自动装配 ->byName(根据名称自动装配):必须将目标Bean的名称和属性名设置完全相同, ->constuuctor(通过是

Spring Autowire自动装配

在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过"ref"属性手动设定 byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它. byType – 按数据类型自动装配.如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它. constructor – 在构造函数参数的byType方式. autodetect – 如果找到默认的构造函数,使用"自动装配用构造";

【Spring】—— 自动装配

一.Spring中装配bean的方式 1.在XML中显式配置 2.在Java中进行显式配置 3.隐士的bean发现机制和自动装配 二.自动装配示例 1.在需要装配到其他bean中的类中加入@Component注解 package study.spring.configure.auto; import org.springframework.stereotype.Component; /** * 第一步:将该类声明成一个组件类,括号内的参数为组件类的id自定义名称,也可以使用@Named. * s