spring事件监听

spring事件监听

ApplicationListener监听容器中发布的事件

实现ApplicationListener来完成事件监听

java 复制代码
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

   /**
    * Handle an application event.
    * @param event the event to respond to
    */
   void onApplicationEvent(E event);

}

spring中定义的事件

Spring 提供了以下 5 中标准的事件:

  • 上下文更新事件ContextRefreshedEvent

    该事件会在ApplicationContext 被初始化或者刷新时发布。也可以在调用 ConfigurableApplicationContext 接口中的 refresh()方法时被触发

  • 上下文开始事件ContextStartedEvent

    当容器调用ConfigurableApplicationContext的 Start()方法开始/重新开始容器时触发该事件

  • 上下文停止事件ContextStoppedEvent

    当容器调用 ConfigurableApplicationContext的 Stop()方法停止容器时触发该事件

  • 上下文关闭事件ContextClosedEvent

    当容器调用 ConfigurableApplicationContext的close()方法关闭ApplicationContext时触发该事件。容器被关闭时,其管理的所有单例 Bean 都被销毁

  • 请求处理事件RequestHandledEvent

    在 Web 应用中,当一个 http 请求(request)结束触发该事件

spring的事件处理是单线程的,当事件被发布时,该进程会阻塞直到所有的接收者得到该消息

自定义事件监听器

可以实现ApplicationListener来自定义事件,如果一个 bean 实现了 ApplicationListener 接口,当一个 ApplicationEvent 被发布以后,bean 会自动被通知

java 复制代码
@Component
public class UserLogListener implements ApplicationListener<UserEvent> {

    private final UserEventLogService userEventLogService;

    @Override
    public void onApplicationEvent(UserEvent userEvent) {
        // 处理事件
    }

}

事件需要继承ApplicationEvent

java 复制代码
public class UserEvent extends ApplicationEvent {

}

可以使用publishEvent方法来发布事件

java 复制代码
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig4.class);

context.publishEvent(new UserEvent() {
        });

zhhll.icu/2021/框架/spr...

本文由mdnice多平台发布

相关推荐
yaoxin521123几秒前
276. Java Stream API - 使用 flatMap 和 mapMulti 清理数据并转换类型
java·开发语言·windows
Vic101013 分钟前
【无标题】
java·数据库·分布式
摇滚侠6 分钟前
Java 零基础全套视频教程,异常,处理异常,自定义异常,笔记 124-129
java·笔记
伯明翰java20 分钟前
【无标题】springboot项目yml中使用中文注释报错的解决方法
java·spring boot·后端
企微自动化24 分钟前
企业微信二次开发:深度解析外部群主动推送的实现路径
java·开发语言·企业微信
_修铁路的24 分钟前
【Poi-tl】 Word模板填充导出
java·word·poi-tl
武子康26 分钟前
Java-216 RocketMQ 4.5.1 在 JDK9+ 从0到1全流程启动踩坑全解:脚本兼容修复(GC 参数/CLASSPATH/ext.dirs)
java·大数据·分布式·消息队列·系统架构·rocketmq·java-rocketmq
austin流川枫27 分钟前
🔥MySQL的大表优化方案 (实战分享)
java·mysql·性能优化
码界奇点30 分钟前
基于Spring Boot和Vue.js的视频点播管理系统设计与实现
java·vue.js·spring boot·后端·spring·毕业设计·源代码管理
爱吃山竹的大肚肚31 分钟前
MySQL 支持的各类索引
java·数据库·sql·mysql·spring·spring cloud