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

相关推荐
你怎么知道我是队长37 分钟前
C语言---字符串
java·c语言·算法
rannn_1111 小时前
【Java项目】中北大学Java大作业|电商平台
java·git·后端·课程设计·中北大学
资生算法程序员_畅想家_剑魔1 小时前
Java常见技术分享-26-事务安全-锁机制-常见的锁实现
java·开发语言
座山雕~1 小时前
spring
java·后端·spring
草原印象1 小时前
Spring、SpringMVC、Mybatis框架整合实战视频课程
java·spring·mybatis
乌日尼乐2 小时前
【Java】IO流完全指南
java·后端
zhaokuner2 小时前
14-有界上下文-DDD领域驱动设计
java·开发语言·设计模式·架构
信码由缰2 小时前
停止编写Excel规格文档:企业级Java开发的Markdown先行方法
java·ai编程·markdown
k***92162 小时前
【c++】多态
java·开发语言·c++
西敏寺的乐章2 小时前
ThreadLocal / InheritableThreadLocal / TransmittableThreadLocal(TTL)学习总结
java·开发语言·网络