Spring事件发布监听机制

我们都知道Spring中的事务,简单来说,可以用一个注解 @Transactional 来搞定。但是,你听过Spring中还有一个名叫事件的东西吗?事务与事件只有一字之差,那么事件又有什么作用呢,又该在哪些场景下使用。接下来,让我们一起入门Spring中的事件发布监听机制!

种一棵树最好的时间是10年前,其次就是现在,加油!
                                                                                   --by蜡笔小柯南

适用场景

  1. 异步处理
    例如用户注册成功后,异步发送邮件、短信通知,或记录日志。通过事件机制,主流程无需等待耗时操作,提升响应速度。
  2. 业务解耦
    当多个业务逻辑需要响应同一操作时(如订单支付后更新库存、发送通知、生成报表),事件机制将核心逻辑与扩展逻辑解耦,避免代码臃肿。
  3. 数据变更通知
    数据库增删改后,触发缓存更新、数据同步等操作。例如:用户信息修改时,通知其他系统更新缓存。
  4. 系统监控与审计
    关键操作(如登录失败、支付异常)触发事件,供监控系统实时收集并告警。
  5. 插件化扩展
    允许第三方模块通过监听事件实现功能扩展,无需修改核心代码(如电商平台的促销插件)

核心优势

优势 说明
松耦合 发布者与监听者无直接依赖,通过事件对象交互,降低模块耦合度
可扩展性 新增业务只需添加监听器,无需修改原有代码(符合开闭原则)
异步处理能力 结合@Async注解,轻松实现异步执行,提升吞吐量
代码可维护性 逻辑拆分到独立监听器中,职责单一,代码更清晰易维护
事务边界管理 可结合@TransactionalEventListener,在事务提交后触发监听逻辑

代码实现

需求:比如,我们有一个用户注册的服务,当用户注册成功后,需要给用户发送短信和邮件

我们传统的处理方式,一般是这样:先处理用户注册,注册完成后,发送短信,发送验证码。

public class UserServiceImpl implements UserService {
   
    @Override
    public String registerUser(RegisterInfo registerInfo) {
   
        // 用户注册处理逻辑...
        // 向用户发送短信
        // 向用户发送邮件 
    }
}

即,在注册成功后的逻辑下,继续添加其他代码,这会使我们代码的耦合性大大提高,开发中遵循的原则是,低耦合,如果后续还需要再添加新的逻辑,如:发送一些订阅通知、APP消息通知等等,就还需要在此后续添加其他代码,会使整个代码结果变的更庞大,更冗余,更不易维护。

下面,我们使用事件机制来优化一下。

结构搭建

Controller层

register()方法是一个用户注册方法

@RestController
@RequestMapping("/user")
public class UserController {
   

    @Autowired
    private UserService userService;

    @RequestMapping("/register")
    public String register(@RequestParam(name = "name",required = false) String name, @RequestParam(name = "email", required = false) String email, @RequestParam(name = "phone", required = false) String phone) {
   
        RegisterInfo registerInfo = null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值