1. 使用Bean名称查询springbean。用枚举定义具体实现类,实现类统一调佣父类。
枚举定义:
public enum QwAppMsgBusinessTypeEnum {
COMMON(1, "CommonAppMsgService", "默认通知任务"),
AGENT(2, "WeAgentMsgService", "应用通知任务"),
QI_RULE(3, "WeChatMsgQiRuleService", "质检通知任务"),
;
@Getter
private int type;
@Getter
private String beanName;
@Getter
private String desc;
QwAppMsgBusinessTypeEnum(int type, String beanName, String desc) {
this.type = type;
this.beanName = beanName;
this.desc = desc;
}
}
定义实现类: 定义名称、继承父类
@Service("WeAgentMsgService")
public class WeAgentMsgServiceImpl extends AbstractAppMsgService {
}
定义父类:
@Service
public abstract class AbstractAppMsgService {
// 可定义抽象方法,实现类必须要实现方法。 具体业务处理消息体
protected abstract WeAppMsgQuery getWeAppMsg(QwAppMsgBody appMsgBody);
// 也可定义空方法,根据情况在实现类重写方法
protected void callBackResult(WeAppMsgVo appMsgVo) {
}
// 通用逻辑方向可以在父类中写
public void sendAppMsg(QwAppMsgBody appMsgBody) {
WeAppMsgVo data = new WeAppMsgVo();
//XXXXXXXXXXX
}
}
具体调用方式:
QwAppMsgBusinessTypeEnum qwAppMsgBusinessTypeEnum = QwAppMsgBusinessTypeEnum.parseEnum(appMsgBody.getBusinessType());
SpringUtils.getBean(qwAppMsgBusinessTypeEnum.getBeanName(), AbstractAppMsgService.class).sendAgentMsg(appMsgBody);
2. 使用spring依赖注入,实现工厂类
定义工厂类: spring通过依赖注入,自动用springbean名称,把抽象类对应的实现类装配到MAP中
@Service
public class KimStrategyBeanFactory {
@Autowired
private final Map<String, KimStrategy> eventStrategyMap = new ConcurrentHashMap<>();
public KimStrategyBeanFactory(Map<String, KimStrategy> strategyMap) {
this.eventStrategyMap.putAll(strategyMap);
}
// 这个跟工厂类没有关系,只是开启统一调用方法而已
public void getResource(String type, String message) {
eventStrategyMap.get(type).eventHandle(message);
}
}
抽象类:
public abstract class KimStrategy {
public abstract void eventHandle(String message);
}
实现类:
@Service("a_kim")
public class AKimStrategyImpl extends KimStrategy{
@Override
public void eventHandle(String message) {
System.out.println("AKimStrategyImpl:"+message);
}
}
@Service("b_kim")
public class BKimStrategyImpl extends KimStrategy{
@Override
public void eventHandle(String message) {
System.out.println("BKimStrategyImpl:"+message);
}
}
调用:
kimStrategyBeanFactory.getResource("b_kim","msg");

1057

被折叠的 条评论
为什么被折叠?



