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