spring 监听器 Listener

简介

Spring的事件为Bean和Bean之间的消息传递提供支持。当一个对象处理完某种任务后,通知另外的对象进行某些处理,常用的场景有进行某些操作后发送通知,消息、邮件等情况。 

Spring提供一些主要的事件监听

ServletContextListener -- 监听servletContext对象的创建以及销毁

    contextInitialized(ServletContextEvent arg0)   -- 创建时执行
    contextDestroyed(ServletContextEvent arg0)  -- 销毁时执行

HttpSessionListener  -- 监听session对象的创建以及销毁

    sessionCreated(HttpSessionEvent se)   -- 创建时执行
    sessionDestroyed(HttpSessionEvent se) -- 销毁时执行

ServletRequestListener -- 监听request对象的创建以及销毁

    requestInitialized(ServletRequestEvent sre) -- 创建时执行
    requestDestroyed(ServletRequestEvent sre) -- 销毁时执行

ServletContextAttributeListener  -- 监听servletContext对象中属性的改变

    attributeAdded(ServletContextAttributeEvent event) -- 添加属性时执行
    attributeReplaced(ServletContextAttributeEvent event) -- 修改属性时执行
    attributeRemoved(ServletContextAttributeEvent event) -- 删除属性时执行

HttpSessionAttributeListener  --监听session对象中属性的改变

    attributeAdded(HttpSessionBindingEvent event) -- 添加属性时执行
    attributeReplaced(HttpSessionBindingEvent event) -- 修改属性时执行
    attributeRemoved(HttpSessionBindingEvent event) -- 删除属性时执行

ServletRequestAttributeListener  --监听request对象中属性的改变

    attributeAdded(ServletRequestAttributeEvent srae) -- 添加属性时执行
    attributeReplaced(ServletRequestAttributeEvent srae) -- 修改属性时执行
    attributeRemoved(ServletRequestAttributeEvent srae) -- 删除属性时执行

写一个session监听器用例

@Configuration
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    System.out.println("【监听器:Session】创建");
}

@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    System.out.println("【监听器:Session】 销毁");
}
}

自定义事件监听 

springboot中事件和事件监听器的父类分别是:ApplicationEvent和ApplicationListener。

自定义事件监听用例 

监听部分

@Component
public class MsgListener implements ApplicationListener<SendMsgEvent> {
@Override
public void onApplicationEvent(SendMsgEvent sendMsgEvent) {
    sendMsgEvent.output();
    System.out.println(sendMsgEvent.receiver + " MsgListener msg : " + sendMsgEvent.content );
}
}

事件部分

public class SendMsgEvent extends ApplicationEvent {

private static final long serialVersionID = 1L;

// 收件人
public String receiver;

// 收件内容
public String content;

public SendMsgEvent(Object source) {
    super(source);
}

public SendMsgEvent(Object source, String receiver, String content) {
    super(source);
    this.receiver = receiver;
    this.content = content;
}

public void output(){
    System.out.println("I had been sand a msg to " + this.receiver);
}
}

测试用例

@Autowired
ApplicationContext applicationContext;

@GetMapping("/createSession")
public void createSession(HttpServletRequest request) {
    HttpSession sessoin=request.getSession();//这就是session的创建
    sessoin.setAttribute("x","x");//给session添加属性属性
    applicationContext.publishEvent(new SendMsgEvent(source, receiver, content));
}

测试结果

spring 监听器 Listener

上一篇:.NET Core容器化开发系列(零)——计划


下一篇:datagrid中updateRow方法的使用