springboot之监听器

springboot中监听器的使用

自定义监听事件


1. springboot中监听器的使用

1.1 监听Servlet上下文对象, 可以用在初始化,加载本地缓存
@Component
public class MyServletContextListener implements ApplicationListener<ContextRefreshedEvent> {
   @Override
   public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
       // 先获取到application上下文
       ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
       // 获取application域对象,将查到的信息放到application域中
       ServletContext application = applicationContext.getBean(ServletContext.class);
       application.setAttribute("userName", "刘泽林");
   }
}
ServletContext application = request.getServletContext();
String userName = application.getAttribute("user");
1.2 监听HTTP会话 Session对象
@Component
public class MyHttpSessionListener implements HttpSessionListener {

    /**
     * 记录在线的用户数量
     */
    public Integer count = 0;
    @Override
    public synchronized void sessionCreated(HttpSessionEvent httpSessionEvent) {
        count++;
        httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
    }

    @Override
    public synchronized void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        count--;
        httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
    }
}
Integer count = (Integer) request.getSession().getServletContext().getAttribute("count");
1.3 监听客户端请求Servlet Request对象
@Component
public class MyServletRequestListener implements ServletRequestListener {
    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
    }

    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
    }
}

2. 自定义监听事件

2.1 新建事件类
public class MyEvent extends ApplicationEvent {

    private String userName;

    public MyEvent(Object source, String userName) {
        super(source);
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}
2.2 新建事件监听类
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent myEvent) {
        String userName = myEvent.getUserName();
        // 处理事件,实际项目中可以通知别的微服务或者处理其他逻辑等等
        System.out.println("用户名:" + userName);
    }
}
2.3 发布事件
MyEvent event = new MyEvent(this, "刘泽林");
applicationContext.publishEvent(event);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值