spring 开发设计方式

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");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值