框架内置了监听器供用户使用
监听器作用
- 监听器可以把不同条件的代码逻辑放在不同的方法里面单独处理、避免在同一个方法里面分支太多。造成逻辑混乱 代码可读性差的问题
- 示例: 例如 发短信需要 用户有很多发短信渠道 华为 阿里 腾讯 通联 不同的渠道调用服务商不一样 但是最终通过给用户的接口是一个。这时如果写if else 就会很麻烦
监听器使用方式
- 在需要监听的地方 注入 DispatcherListenerManager
- 调用 getListener 方法 获取监听器(通过不同key 用户自定义 全局唯一 找到对应的监听器)
- 执行监听器 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";
}
}
说明
打个比方啊,监听器就像你家里的智能门铃:
比如你家来人按门铃时,门铃会自动响(核心功能),同时还能触发拍照、发送通知到手机(扩展功能)。
放到系统里也是一样:
核心业务:比如用户管理里的新增、修改、删除操作,就像 “门铃响” 这个基础功能。
扩展业务:比如用户操作后需要通知下游系统、记录日志,就像 “拍照、发通知” 这些额外操作。
如果直接在每个用户操作的接口里写这些扩展逻辑,就像在每个房间门口都装一套独立的门铃 + 拍照设备,不仅麻烦还容易漏装。
而用监听器,就相当于装一个统一的智能中枢:只要监听 “用户操作” 这个事件,不管是新增还是删除,中枢都会自动触发扩展功能,让核心业务和扩展功能分开,既省事又不容易出错~