框架内置了监听器供用户使用

监听器作用

  • 监听器可以把不同条件的代码逻辑放在不同的方法里面单独处理、避免在同一个方法里面分支太多。造成逻辑混乱 代码可读性差的问题
  • 示例: 例如 发短信需要 用户有很多发短信渠道 华为 阿里 腾讯 通联 不同的渠道调用服务商不一样 但是最终通过给用户的接口是一个。这时如果写if else 就会很麻烦

监听器使用方式

  1. 在需要监听的地方 注入 DispatcherListenerManager
  2. 调用 getListener 方法 获取监听器(通过不同key 用户自定义 全局唯一 找到对应的监听器)
  3. 执行监听器 execute

监听器入口

    @Autowired
    private DispatcherListenerManager dispatcherListenerManager;
    
    public CommonResult sendTextMessage(String id) {
        SmsConfigPO smsConfigPO = smsConfigService.getId(id);

        DispatcherListener dispatcherListener = dispatcherListenerManager.getListener(smsConfigPO.getPlateform().toUpperCase());
        if (dispatcherListener == null) throw new KPServiceException(KPStringUtil.format("没有找到{0}短信渠道", jfSmsConfigEntity.getPlateform()));

        dispatcherListener.execute(new KPJSONFactoryUtil().put("parameter", sMSRequest).put("smsConfigPO", smsConfigPO).build());

        return CommonResult.success("发送成功");
    }

监听器实现、用户自己创建各种监听器、例如 创建listener文件夹 软件创建2个监听器 HuaweiListener.java LianTongListener.java

LianTongListener 监听器 处理通联渠道发短信

@Component
@Slf4j
public class LianTongListener implements DispatcherListener {

    @Autowired
    private SMSLianTongService smsLianTongService;

    @Override
    public void execute(JSONObject parameter) {
       处理逻辑代码
    }

    固定写法 必须加  liantong 表示key 全局唯一 也就是 dispatcherListenerManager.getListener("liantong"); 这样配置
    当用户查询liantong 监听器 然后执行execute 的时候  就会调用当前监听器的 execute方法 
    @Override
    public String key() {
        return "liantong";
    }
}

HuaweiListener 监听器 处理华为渠道发短信

@Component
@Slf4j
public class HuaweiListener implements DispatcherListener {

    @Override
    public void execute(JSONObject parameter) {
       处理逻辑代码
    }
    
    固定写法 必须加  huawei 表示key 全局唯一 也就是 dispatcherListenerManager.getListener("huawei"); 这样配置
    当用户查询huawei 监听器 然后执行execute 的时候  就会调用当前监听器的 execute方法 
    @Override
    public String key() {
        return "huawei";
    }
}

说明

打个比方啊,监听器就像你家里的智能门铃:

比如你家来人按门铃时,门铃会自动响(核心功能),同时还能触发拍照、发送通知到手机(扩展功能)。

放到系统里也是一样:

  • 核心业务:比如用户管理里的新增、修改、删除操作,就像 “门铃响” 这个基础功能。

  • 扩展业务:比如用户操作后需要通知下游系统、记录日志,就像 “拍照、发通知” 这些额外操作。

如果直接在每个用户操作的接口里写这些扩展逻辑,就像在每个房间门口都装一套独立的门铃 + 拍照设备,不仅麻烦还容易漏装。

而用监听器,就相当于装一个统一的智能中枢:只要监听 “用户操作” 这个事件,不管是新增还是删除,中枢都会自动触发扩展功能,让核心业务和扩展功能分开,既省事又不容易出错~