实现一个接口将多个实现类注入Spring容器中用map来管理

407 阅读1分钟
//提供一个接口供各服务实现自己业务逻辑
public interface ResolveParameter {
    LogResVo resolveParas(LogReqVo logReqVo);
}
//各服务实现接口后,将实现bean注入到spring容器中
@Component("registerOrBindCard")
@Slf4j
public class RegisterOrBindCardParse implements ResolveParameter {
    @Override
    public LogResVo resolveParas(LogReqVo logReqVo) {
        String reqParam = "";
        if(null != logReqVo){
            reqParam = logReqVo.getReqParam();
            StringBuilder stringBuilder = new StringBuilder(reqParam);
            reqParam = stringBuilder.substring(1, stringBuilder.length() - 1).toString();
        }
        log.info("绑定就诊卡参数解析入参:{}",reqParam);
        RegisterCardReqVO registerCardReqVO = JSON.parseObject(reqParam, RegisterCardReqVO.class);
        LogResVo logResVo = new LogResVo();
        logResVo.setOperationDescription("新增就诊卡:".concat(registerCardReqVO.getPatientName()));
        log.info("logResVo = {}",JSON.toJSONString(logResVo));
        return logResVo;
    }

//将注入Spring容器的实现类都按照key为bean名 value为实现类的方式存放在map中,根据bean名获取对应bean
@Autowired
private Map<String, ResolveParameter>   resolveParameterMap;
//按照注入的实现bean的名字从map中获取对应bean
ResolveParameter resolveParameter = resolveParameterMap.get(converseMark);
if (Objects.isNull(resolveParameter)){
    DefaultResolveParameter defaultResolveParameter = new DefaultResolveParameter();
    logResVo = defaultResolveParameter.resolveParas(logReqVo);
    adminLog.setOperationDescription(logResVo.getOperationDescription());
    log.info("默认接口解析返回值:{}",JSON.toJSONString(logResVo));
}else{
    logResVo = resolveParameter.resolveParas(logReqVo);
    adminLog.setOperationDescription(logResVo.getOperationDescription());
    log.info("接口解析后返回值:{}",JSON.toJSONString(logResVo));
}