【使用Spring事件监听机制实现业务解耦+相关拓展】

一.业务场景

假如咱们项目里面有这样一个场景,处理业务逻辑完需要发送一个邮件。
我们平常做法可以通过线程池提交一个异步任务或者通过CompletableFuture开启一个异步任务调用发送邮件方法,这里简单介绍一个新的方式来了解与使用Spring的事件发布与监听,了解这种机制有诸多方便!

二.Spring事件监听机制是什么?

1.相关概念

事件监听机制也是设计模式中观察者模式、发布-订阅模式的一种实现。
Spring的事件机制是A调用一个发布事件的方法,就能自动调用监听这个事件的方法B,这个过程有3个对象:

  • 事件本身,其实就是一个对象,这个对象对应的类要继承Spring的ApplicationEvent,这样才能被Spring识别。
  • 发布事件的对象,一般都是使用ApplicationContext的publishEvent方法来发布;
  • 接收(或者叫监听)事件的对象,实现ApplicationListener 接口或者使用@EventListener注解的方法;

2.解耦

通常我们利用消息队列来实现不同系统之间的解耦,如用户注册完成后,可以向消息队列发布一条消息,然后订阅了此topic的子系统(如邮件服务,积分服务)收到发布的消息之后,就会做相应的处理。这样做的好处是避免了在注册服务里耦合其他服务的代码,并且,执行子系统的业务将会异步执行,互不影响, 使用事件发布与监听机制也可以做业务解耦。

三.使用步骤

1.定义事件

定义邮件事件本身,只管邮件发送

public class MailEvent extends ApplicationEvent {
   
   

    public MailEvent(Object source) {
   
   
        super(source);
    }

    public void sendMail() {
   
   
       log.info("邮件发送中...");
    }
}

2.发布事件

模拟处理业务逻辑,然后通过我们的Spring容器发布这个邮件事件,其内部就是通过Spring的事件发布器发布的事件。

    @Autowired
    private ApplicationContext applicationContext;

    @GetMapping("/pub-event")
    public void pub() {
   
   
        log.info("业务逻辑处理中....");
        applicationContext.publishEvent(new MailEvent(this));
    }

3.侦听事件的对象

  • 了解vue的小伙伴们应该知道watch侦听函数,侦听到对应的变量改变则触发侦听函数执行侦听器逻辑,一样的道理,这里是侦听器侦听到对应的事件则执行侦听器的逻辑。
  • 通过实现ApplicationListener接口或者使用@EventListener注解来定义侦听器,这里定义了4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值