Spring事件监听机制使用和原理解析

本文介绍了Spring的事件监听机制,包括定义事件、事件监听器、事件发布器的使用,以及深入解析了事件的流转过程,从`initApplicationEventMulticaster()`到`invokeListener()`,阐述了ApplicationEvent、ApplicationListener、ApplicationEventPublisher和ApplicationEventMulticaster等关键组件的作用,强调了事件监听机制在系统解耦中的价值。
摘要由CSDN通过智能技术生成

前言

好久没有更新Spring了,今天来分享一下Spring的事件监听机制,之前分享过一篇Spring监听机制的使用,今天从原理上进行解析,Spring的监听机制基于观察者模式,就是就是我们所说的发布订阅模式,这种模式可以在一定程度上实现代码的解耦,如果想要实现系统层面的解耦,那么消息队列就是我们的不二选择,消息队列本身也是发布订阅模式,只是不同的消息队列的实现方式不一样。

使用

之前的文章我们使用了注解的方式,今天我们使用接口的方式来实现。

定义事件

如下定义了一个事件AppEvent,它继承了ApplicationEvent类,如果我们要使用Spring的事件监听机制,那么我们定义的事件必须继承ApplicationEvent ,否则就无法使用。

/**
 * 功能说明: 事件
 * <p>
 * Original @Author: steakliu-刘牌, 2023-03-30  11:02
 * <p>
 * Copyright (C)2020-2022  steakliu All rights reserved.
 */
public class AppEvent extends ApplicationEvent {
    private final String event;

    public AppEvent(Object source, String event) {
        super(source);
        this.event = event;
    }

    public String getEvent() {
        return event;
    }
}

定义事件监听器

事件监听器实现了ApplicationLister接口,其泛型为ApplicationEvent,因为要监听事件,所以必须按照Spring的规则来,onApplicationEvent方法就是监听到的事件,在这里我们可以进行我们的业务处理,我们可以看出AppLister我们加上了@Component注解,因为事件监听器需要加入Spring IOC容器中才能生效。

/**
 * 功能说明:事件监听器
 * <p>
 * Original @Author: steakliu-刘牌, 2023-03-30  11:03
 * <p>
 * Copyright (C)2020-2022  steakliu All rights reserved.
 */
@Component
public class AppListener implements ApplicationListener<AppEvent> {
    @Override
    public void onApplicationEvent(AppEvent event) {
        System.out.println("event:  "+event.getEvent());
    }
}

事件发布器

有了事件监听器,就需要发布事件,所以就需要一个事件发布器,事件发布器使用的是ApplicationEventPublisher,使用它的publishEvent方法进行事件发布。

/**
 * 功能说明:事件发布器
 * <p>
 * Original @Author: steakliu-刘牌, 2023-06-11  13:55
 * <p>
 * Copyright (C)2020-2022  steakliu All rights reserved.
 */
@Component
public class AppPublisher {

    @Resource
    private
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值