使用Spring事件进行代码解耦

Spring事件机制

Spring中的事件机制是一个观察者模式的实现.观察者模式就是一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.Spring的事件由ApplicationContext发布。

Spring中的默认事件

这里写图片描述

ContextStartedEvent: ApplicationContext启动后触发的事件
ContextStoppedEvent: ApplicationContext停止后触发的事件
ContextRefreshedEvent:ApplicationContext初始化或刷新完成后触发的事件
ContextClosedEvent: ApplicationContext关闭后触发的事件

· 在tomcat中ContextRefreshedEvent 可能会触发两次,SpringBoot中只触发一次

Spring中的事件监听者

·ApplicationListener spring中的事件监听者

这里写图片描述

Spring中事件的载体

·ApplicationEvent 是Spring中的事件载体

这里写图片描述

一个简单的监听器的实现

public class ApplicationRefreshEventListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        // todo something
    }
}

一个自定义的事件实现

public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source) {
        super(source);
    }
}

一个自定义事件的监听

public class CustomEventListenner implements ApplicationListener<CustomEvent> {
    @Override
    public void onApplicationEvent(CustomEvent customEvent) {

    }
}

发出一个事件

public class ApplcationEventsPublish {

    private ApplicationContext applicationContext;

    public void sendEmail(String email) {
        applicationContext.publishEvent(new CustomEvent(new Object()));
    }

}

解耦的思想

前面介绍了那么多,下面介绍如何进行解耦与高性能。
一个典型的场景就是用户在注册的时候需要发送验证码,这时就需要将发送验证码的逻辑写到用户注册的业务逻辑中,如果短信发送的API发生变化后,就需要对用户注册的代码段进行修改,实际上这部分修改跟用户注册没什么关系,修改结果之后需要对用户注册也需要进行测试,如果对发送验证码定义成事件,在有变化之后只需要修改对应事件监听,或添加时间监听,对原来的代码没有入侵。

高性能的实现,在事件的监听器中可以采用多线程的方式,这样的方式在正常的业务逻辑中是无法采用的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值