思路
1. 定义接口ResHandler
public interface ResHandler {
/**
*
*/
void HandlerRes(String data, String deviceId);
/**
* 获取模式
* @return
*/
String getModeType();
2. 所有处理类实现ResHandler并实现相应的处理逻辑
@Component
public class PushAddProgramParam implements ResHandler {
@Override
public void HandlerRes(String data, String deviceId) {
NettySocketUtil.sendNotice(data,ModeEnum.PUSH_ADD_PROGRAM_PARAM.getType());
}
@Override
public String getModeType() {
return ModeEnum.PUSH_ADD_PROGRAM_PARAM.getMode()+ModeEnum.PUSH_ADD_PROGRAM_PARAM.getType();
}
}
3. Spring中注入所有已实现ResHandler的处理服务
@Service
public class HandlerResHolder {
/**
* 将 Spring 中所有实现 ServiceFee 的接口类注入到这个Map中
*/
private final Map<String, ResHandler> orderStrategyMap = new ConcurrentHashMap<>();
public HandlerResHolder(Map<String, ResHandler> strategyMap) {
this.orderStrategyMap.clear();
strategyMap.forEach((k, v)-> this.orderStrategyMap.put(v.getModeType(), v));
}
private ResHandler getResHandler(String modeType) {
ResHandler resHandler = orderStrategyMap.get(modeType);
if (ObjectUtil.isNull(resHandler)) {
throw new IllegalArgumentException("传递数据参数不符合规范");
}
return resHandler;
}
public void getResult(String modeType, String data, String deviceId) {
getResHandler(modeType).HandlerRes(data, deviceId);
}
}
- 需要处理的地方调用getResult
@Async
public void handleReceiveData(String receiveData) {
log.info("数据处理后:"+receiveData);
JSONObject resJsonObject = JSONUtil.parseObj(receiveData);
// log.debug(resJsonObject.getStr("data"));
handlerResHolder.getResult(resJsonObject.getStr(SocketConst.KEY_MODE) + resJsonObject.getStr(SocketConst.KEY_TYPE), resJsonObject.getStr("data"),resJsonObject.getStr("deviceId"));
}