所有分类
  • 所有分类
  • 未分类

观察者模式Java实战-写法3:Spring的事件

简介

说明

本文用示例介绍观察者模式的写法:Spring事件。

Spring事件和传统观察者模式的概念的区别

传统观察者模式Spring事件
主题事件
观察者监听器

优缺点

优点

  1. 策略类会自动注册,无需手动注册策略类。
  2. 可以方便地指定观察者的执行顺序。(观察者模式一般不需要指定顺序,但可以指定当然更好啦!)

缺点

实战

本处使用一个贴近真实场景的案例:订单取消时,要有一系列操作,比如:账户业务需要给用户退钱、库存业务需要给商品退回数量。

在这个场景中,取消订单就是事件,账户业务和库存业务是监听器。

项目结构:

下载源码

此内容仅限VIP查看,请先

测试

测试类

package com.knife.designPattern.controller;

import com.knife.designPattern.publisher.EventPublisher;
import com.knife.designPattern.bo.CancelOrderBO;
import com.knife.designPattern.event.CancelOrderEvent;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "订单")
@RestController
@RequestMapping("order")
public class OrderController {
    @Autowired
    private EventPublisher eventPublisher;

    @ApiOperation("取消订单")
    @PostMapping("cancel")
    public String cancel(@RequestBody CancelOrderBO cancelOrderBO) {
        eventPublisher.publish(new CancelOrderEvent(cancelOrderBO));
        return "success";
    }
}

访问接口

启动项目后,访问Knife4j(接口文档)的地址:http://localhost:8080/doc.html

(当然,你用postman也完全可以)

结果

库存业务开始处理订单取消。接收到的消息:CancelOrderBO(orderNo=2255)
账户业务开始处理订单取消。接收到的消息:CancelOrderBO(orderNo=2255)

注意事项

此方法要慎用!因为它有坑,详见:Spring Event-踩坑(注意事项) – 自学精灵

1

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录