AOP切面的实际应用-后置通知

之前做过一个业务是关于一个合同明细的作废、取消作废、确认等操作之后会相应的更改合同状态,做的时候考虑了一下,在每个业务方法里加这个操作比较麻烦,而且操作又相同,没必要,就决定用切面的方式来进行这个操作,主要是用后置通知,因为合同状态的更改都是在其作废、取消作废等这些操作之后来完成的。

下面上代码来看看吧:

@Aspect
@Component
public class RdAmortizationDetailAspect {

    @Resource
    private RdAmortizationDetailMapper rdAmortizationDetailMapper;
    @Resource
    private IRdContractService rdContractService;

    /**
     * 后置通知-摊销明细作废后更改合同状态条件
     */
    @AfterReturning(value = "execution(* *..RdAmortizationDetailServiceImpl.invalid(..))")
    public void printInvalidAfterSuccess(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        List<Long> ids = (List<Long>) args[0];
        List<RdAmortizationDetail> list = rdAmortizationDetailMapper.selectList(Wrappers.<RdAmortizationDetail>update().lambda().in(RdAmortizationDetail::getId, ids));
        invalidOrConfirmContract(list);
    }

    /**
     * 后置通知-摊销明细取消作废后更改合同状态条件
     */
    @AfterReturning(value = "execution(* *..RdAmortizationDetailServiceImpl.cancelInvalid(..))")
    public void printCancelInvalidAfterSuccess(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        List<Long> ids = (List<Long>) args[0];
        List<RdAmortizationDetail> list = rdAmortizationDetailMapper.selectList(Wrappers.<RdAmortizationDetail>update().lambda().in(RdAmortizationDetail::getId, ids));
        invalidOrConfirmContract(list);
    }

    /**
     * 后置通知-摊销明细确认后更改合同状态条件
     */
    @AfterReturning(value = "execution(* *..RdAmortizationDetailServiceImpl.confirm(..))")
    public void printConfirmAfterSuccess(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        List<RdAmortizationDetail> rdAmortizationDetails = (List<RdAmortizationDetail>) args[0];
        invalidOrConfirmContract(rdAmortizationDetails);
    }

    private void invalidOrConfirmContract(List<RdAmortizationDetail> rdAmortizationDetails){
        //业务处理逻辑代码
        ......
    }
}

@Aspect

此注解位于类前,表示面向切面,即这个类可使用切面编程,降低系统耦合性。

@AfterReturning(value = "execution(* *..RdAmortizationDetailServiceImpl.invalid(..))")

此注解表示后置通知,execution中是方法路径,意思是在invalid方法执行完后,先执行此后置通知方法,再返回。

joinPoint.getArgs();

此方法表示获取使用此后置通知方法的参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值