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多平台发布

相关推荐
morris131几秒前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
七星静香25 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员26 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU26 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie630 分钟前
在IDEA中使用Git
java·git
Elaine2023911 小时前
06 网络编程基础
java·网络
G丶AEOM1 小时前
分布式——BASE理论
java·分布式·八股
落落鱼20131 小时前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
镰刀出海1 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试