Spring Events 详解:解锁事件驱动架构

目录

一、简介

二、Spring Events

三、案例

        3.1 事件监听器的实现方式

四、源码实现

五、总结


一、简介

        这篇文章介绍一下事件驱动相关内容,首先看一个场景,假如有一个系统,用户注册后需要给用户发送邮箱、短信等欢迎提醒,同时还需要给用户发送首条站内短消息,如果让你做这个功能你会怎么做,你可能会觉得这还不简单吗,把这三个功能封装成相应的方法,然后用户注册后分别调一下不就可以了。

        的确这种方式是可以实现,后期可能会加新的需求,继续在后边调用其他功能方法,最后你发现这调来调去没完了,可能用户注册后边跟了 n 个方法的调用,很恶心,于是需要优化一下,你怎么解决呢?

        这时可以使用事件驱动架构,当然你也可以通过消息中间件实现,但是这种方式相对较重,这里重点介绍一下事件驱动。

二、Spring Events

        事件驱动是一种编程范式,其中程序的执行是由外部事件触发的,而不是通过预先定义好的顺序执行的。在这种模式下,程序不断地监听事件源,当检测到事件发生时,就会执行相应的代码。

        Spring 内部提供了这种事件驱动的机制,那就是 Spring Events,它是观察者设计模式的实现。它增强了不同组件之间的通信,超越了传统的方法调用,并且基于松耦合架构,实现了解耦,减少了模块间的依赖。

        Spring Events 的核心是三个组件:事件、发布者和监听器。

        定义事件时需要实现 ApplicationEvent,事件在发布者和监听器之间传输数据。发布者创建此事件对象并使用 ApplicationEventPublisher 来发布它,监听器可以通过多种方式来实现,如注释(@EventListener)或实现 ApplicationListenter接口。

三、案例

        下面就来实现一下上面提到的用户注册的案例。

        首先是定义事件

public class UserDTO extends ApplicationEvent {

    private Integer userId;

    private String name;

    private Integer age;


    /**
     * Create a new {@code ApplicationEvent}.
     *
     * @param source the object on which the event initially occurred or with
     *               which the event is associated (never {@code null})
     */
    public UserDTO(Object source) {
        super(source);
    }
}

        定义三种不同的事件监听器

// 发送短信的监听器
@Component
public class UserRegisterSmsListener implements SmartApplicationListener {

    @Override
    public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
        return eventType == UserDTO.class;
    }

    @Override
    public int getOrder() {
        return 1;
    }

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        // 这里完成短信发送
        System.out.println("监听到用户注册,准备发送短信, user:" + 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越不平凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值