方法递归调用,控制方法后置切面逻辑只执行第一次

本文介绍了一个业务场景,如何在Spring Boot应用中,针对一个递归调用的方法,确保其后置切面逻辑只在第一次调用时执行。通过使用ThreadLocal变量和@Order注解来控制切面执行顺序,达到在同一个事务中,后续递归调用不执行相同切面逻辑的目的。
摘要由CSDN通过智能技术生成

1、业务场景:为一个TaskService.commit方法定义一个后置切面通知(发送邮件、推送待办等),每次commit方法后执行切面方法,现在commit方法中递归调用commit(当前service对象获取的是Springboot容器中的代理对象TaskService currProxy = ApplicationContextHolder.getBean(TaskService.class)),此时切面方法执行次数与commit方法调用次数是一样的。

2、要求:在同一个事务中,多次commit方法执行,控制第一次commit方法执行切面方法逻辑,后续commit方法调用无需执行。

3、解决方案:commit方法另外再加一个后置切面commitJudge,通过使用ThreadLocal保存当前线程的一个boolean值,boolean值初始化为false,执行完切面方法后将值置为true;commit方法的两个后置切面执行顺序通过注解@Order控制,设置的值越小,优先级越高

4、伪代码

 4.1 需要添加切面的commit方法

4.2  commit方法递归

 4.3 commit方法的3个后置切面,切面执行顺序按照@Order设置的值执行,我的切面之后

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值