• 基于springBoot的责任链模式


    在日常的业务处理中,责任链很常用,在此做记录

    /**
    * 校验调用链封装
    *
    * @author nanfengxiangbei
    * @date 2022/3/7
    */
    @Component
    public class ToPayCheckerMaster extends ToPayAbstractChecker {

    @Autowired
    public ToPayCheckerMaster(ToPaySignChecker toPaySignChecker,
    ToPayAccessChecker toPayAccessChecker) {
    // 设置校验调用链(注意先后顺序)

    // --签名校验
    setNext(toPaySignChecker);

    // -- 权限校验
    toPaySignChecker.setNext(toPayAccessChecker);
    }

    /**
    * 启动校验
    *
    * @param toPayBo 申请上下文
    */
    @Override
    public void check(ToPayBo toPayBo) {
    checkNext(toPayBo);
    }
    }


    /**
    * 校验调用链抽象类
    *
    * @author nanfengxiangbei
    * @date 2022/3/7
    */
    public abstract class ToPayAbstractChecker {

    /**
    * 下一个校验对象
    */
    protected ToPayAbstractChecker next;

    /**
    * 执行校验
    *
    * @param toPayBo 上下文
    */
    public abstract void check(ToPayBo toPayBo);

    protected void checkNext(ToPayBo toPayBo) {
    if (toPayBo.getRespVo().getCode().equals(PayInterfaceStatusEnum.SUCCESS.getCode()) && next != null) {
    next.check(toPayBo);
    }
    }

    public void setNext(ToPayAbstractChecker next) {
    this.next = next;
    }
    }


    /**
    * 签名校验
    *
    * @author nanfengxiangbei
    * @date 2022/3/7
    */
    @Component
    public class ToPaySignChecker extends ToPayAbstractChecker {

    private final Logger logger = LoggerFactory.getLogger(ToPaySignChecker.class);

    @NacosValue(value = "${toPay.signChecker.join}", autoRefreshed = true)
    private boolean join;

    /**
    * 执行校验
    *
    * @param toPayBo 上下文
    */
    @Override
    public void check(ToPayBo toPayBo) {

    // 通过nacos注解实现链的加入,或者移除
    if (join) {
    doCheck(toPayBo);
    } else {
    logger.info("Sign checker not join");
    }
    //
    checkNext(toPayBo);
    }

    private void doCheck(ToPayBo toPayBo) {
    long startTime = System.currentTimeMillis();

    logger.info("签名校验,结果:{},耗时:{}", toPayBo.getRespVo().getCode(), System.currentTimeMillis() - startTime);
    }

    }


    @Component
    public class ToPayAccessChecker extends ToPayAbstractChecker {

    private final Logger logger = LoggerFactory.getLogger(ToPayAccessChecker.class);

    private static final String EQUITY_PRODUCT_APP_ID = "1000";

    @NacosValue(value = "${toPay.accessPermChecker.join}", autoRefreshed = true)
    private boolean join;

    /**
    * 执行校验
    *
    * @param toPayBo 上下文
    */
    @Override
    public void check(ToPayBo toPayBo) {
    if (join) {
    doCheck(toPayBo);
    } else {
    logger.info("Access Permission checker not join");
    }
    //
    checkNext(toPayBo);
    }

    private void doCheck(ToPayBo toPayBo) {
    long startTime = System.currentTimeMillis();

    //
    logger.info("结果:{},耗时:{}", toPayBo.getRespVo().getCode(), System.currentTimeMillis() - startTime);
    }

    }

  • 相关阅读:
    NOIP模拟 1
    wlan
    IS-IS IGP
    linux 基础 软件的安装 *****
    第五部分 linux 软件安装RPM SRPM与YUM
    第四部分 linux使用者管理
    添加rpmforge源 centos 7
    x86 保护模式 十 分页管理机制
    X86保护模式 八操作系统类指令
    poj2230 Watchcow【欧拉回路】【输出路径】(遍历所有边的两个方向)
  • 原文地址:https://www.cnblogs.com/nanfengxiangbei/p/16083054.html
Copyright © 2020-2023  润新知