后端使用aop和redis实现防抖

news2025/2/25 9:32:39

在公司的代码开发中遇到了,快速点击就会重复提交的bug,刚好最近在优化代码于是想着在后端实现防抖

1.整体思路

在这里插入图片描述

2.创建防抖的注解

防抖我一般放在存储方法上,在程序运行时使用,于是我的防抖注解是method类型

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AntiShake {

    /**
     * 默认的防抖时间ms
     * @return
     */
    long value() default 1000;

}

3. 接口防抖aop

@annotation(com.hy.district.annotation.AntiShake)
就是定位到我加了AntiShake的方法上,只有这些方法才走aop防抖
redisUtil是redis的工具类主要是对存储与获取进行封装,百度一下很多

/**
 * 接口防抖aop
 */
@Aspect
@Component
@Slf4j
public class AntiShakeAOP {

    @Autowired
    private RedisUtil redisUtil;

    @Around(value = "@annotation(com.hy.district.annotation.AntiShake)")
    public Object antiShake(ProceedingJoinPoint pjp) throws Throwable {
        // 获取调用方法的信息和签名信息
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        // 获取方法
        Method method = signature.getMethod();
        // 获取注解中的参数
        AntiShake aAnnotation = method.getAnnotation(AntiShake.class);
        // 查询redis中是否存在对应关系
        String key = method.getName() + RedisUtil.prefix + SecurityUtils.getUserId();
        Boolean aBoolean = redisUtil.hasKey(key);
        log.error("redis是否有建===> {}", aBoolean);
        if (!aBoolean) {
            redisUtil.setCacheObject(key, aAnnotation.value(), aAnnotation.value(), TimeUnit.MILLISECONDS);
            return pjp.proceed();
        } else {
            log.error("请勿重复点击");
            return null;
        }
    }
}

4. 使用

直接在要用的接口上加上就行了,可以自定义设置防抖时间,不设置就会使用你注解里面的默认时间


@PostMapping("/addAssessmentObject")
    @ApiOperation(value = "存储", notes = "存储")
    @AntiShake(1000)
    public R<String> addAssessmentObject(@RequestBody @Validated TAssessmentObjectDTO tAssessmentObjectDTO) {
        return tAssessmentObjectService.addAssessmentObject(tAssessmentObjectDTO);
    }
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

南美智利市场最全分析开发攻略,收藏一篇就够了

智利是拉美和加勒比国家共同体和南美进步论坛的成员国&#xff0c;与阿根廷和巴西并称为ABC国家。拥有较高的国际竞争力和生活质量&#xff0c;具有稳定的政治环境&#xff0c;全球化的、自由的经济环境&#xff0c;以及较低的腐败感知和相对较低的贫困率&#xff0c;是南美最富…

小谈设计模式(27)—享元模式

小谈设计模式&#xff08;27&#xff09;—享元模式 专栏介绍专栏地址专栏介绍 享元模式模式结构分析享元工厂&#xff08;FlyweightFactory&#xff09;享元接口&#xff08;Flyweight&#xff09;具体享元&#xff08;ConcreteFlyweight&#xff09;非共享具体享元&#xff0…

2023年中国汽车智能工厂市场规模不断增大,智能化已成趋势[图]

汽车智能工厂是在数字化工厂的基础上&#xff0c;通过互联网技术与工业技术结合&#xff0c;数据监管设备以及AI等技术的结合&#xff0c;实现汽车整车从原材料及零部件的生产到运输、组装一系列的自动化生产。汽车智能工厂很大程度上降低成本和人为干扰&#xff0c;实现自动化…

使用VisualVM查看.hprof文件

1、启动VisualVM&#xff1a; VisualVM通常包含在Java开发工具包&#xff08;JDK&#xff09;中。您可以在JDK的bin目录中找到jvisualvm.exe&#xff08;Windows&#xff09;或jvisualvm&#xff08;Linux/Unix&#xff09;文件&#xff0c;然后运行它。 2、加载文件 3、查看…

c++-list

文章目录 前言一、list介绍及使用1、list介绍2、list使用2.1 list构造函数的使用2.2 list iterator的使用2.3 list capacity的使用2.4 list modifiers的使用2.5 list使用算法库中的find模板生成find方法2.6 list中的sort方法 二、list模拟实现1、查看list源码的大致实现思路2、…

SpringBoot注解篇之@Validated

目录 前言Validated作用NotNull与NotBlank区别总结 前言 大家好&#xff0c;我是AK&#xff0c;在做新项目顺便整理SpringBoot相关内容&#xff0c;这里主要介绍下Validated注解的应用&#xff0c;减少核心业务逻辑中一些参数判断的代码。 Validated作用 Validated 是 Spring…

【算法-动态规划】零钱兑换问题-力扣 322

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

PACS外围硬件--九五小庞

1.串口脚踏本线序&#xff1a;白 4 红6 黑8 2.USB脚踏板&#xff08;常用&#xff09; USB脚踏设置软件下载地址https://pmo0158ab-pic2.ysjianzhan.cn/upload/FootSwitchSet20200820.rar 在按键处输入快捷键&#xff0c;写入就可以 3.视频采集卡&#xff08;常用&#xff09;…

angular项目指定端口,实现局域网内ip访问

直接修改package.json文件 "dev": "ng serve --host 0.0.0.0 --port 8080"终端运行npm run dev启动项目。 这里就指定了使用8080端口运行项目&#xff0c;同时局域网内的其他电脑可以通过访问运行项目主机的ip来访问项目 例如项目运行在ip地址为192.168.2…

SpringBoot篇之集成Mybatis-plus

目录 前言一、Mybatis-plus介绍1.1 官网 二、代码生成器总结 前言 大家好&#xff0c;我是AK&#xff0c;整理的SpringBoot集成Mybatis-plus以及代码生成器的使用&#xff0c;时间原因简单的整理下&#xff0c;有问题的可以评论区见或私信我。 一、Mybatis-plus介绍 1.1 官网…

Tomcat的安装和配置

一.Tomcat下载&#xff1a;去Tomcat官网地址 在左侧Download中选择你需要下载的版本&#xff0c;这里我选择Tomcat9 根据电脑系统是32位还是64位选择&#xff0c;这里我选择64-bit Windows zip&#xff0c;点击即可下载 下载后直接解压&#xff0c;这里我解压在E盘的computer…

互联网医院牌照|互联网医院牌照办理指南及材料

互联网医院牌照办理成为医疗行业的热门话题&#xff0c;而作为一家以创新为核心的企业&#xff0c;我们致力于为您揭开这个引人入胜的新领域。随着科技的迅速发展&#xff0c;互联网医院正成为医疗行业的一大趋势。互联网医院牌照&#xff0c;作为一种新型的医疗机构认证&#…

ChatGPT AIGC 制作大屏可视化分析案例

第一部分提示词prompt: 商品 价格 p1 13 p2 41 p3 42 p4 53 p5 19 p6 28 p7 92 p8 62 城市 销量 北京 69 上海 13 南京 18 武汉 66 成都 70 你现在是一名非常专业的数据分析师,请结合上述数据完成下列几件事情 1:第一部分数…

实验室超声波清洗器有哪些特点?

随着科技的飞速发展&#xff0c;各种技术领域相互渗透&#xff0c;超声技术已广泛应用于工程、机械、电子、化工、生物、医疗等诸多行业&#xff0c;并且在日常生活中也扮演着不可或缺的角色。实验室超声波清洗器作为一种高效的清洁设备&#xff0c;具有以下特点&#xff1a; 首…

Qt应用开发(基础篇)——树结构视图 QTreeView

一、前言 QTreeView类继承于QAbstractItemView类&#xff0c;提供了一个树结构视图的模型。 视图基类 QAbstractItemView QTreeView默认为Model/View实现&#xff0c;下面是一个使用QFileSystemModel和QTreeView的结合&#xff0c;显示系统文件结构的实例。 QFileSystemModel …

深度学习基础知识 给模型的不同层 设置不同学习率

深度学习基础知识 给模型的不同层 设置不同学习率 1、使用预训练模型时&#xff0c;可能需要将2、学习率设置方式&#xff1a; 1、使用预训练模型时&#xff0c;可能需要将 &#xff08;1&#xff09;预训练好的 backbone 的 参数学习率设置为较小值&#xff0c; &#xff08;2…

BI工具:让数据分析井然有序一望而知

BI&#xff08;Business Intelligence&#xff09;工具是一类专门用于数据分析和决策支持的软件工具。 它们能够将企业内部和外部的数据进行整合、处理和可视化&#xff0c;帮助用户从海量数据中获取有价值的见解和洞察&#xff0c;并以直观、易懂的方式展示给决策者和相关人员…

解决uniapp里scroll-view横向滚动的问题

一、前言 本以为是一件很简单的事&#xff0c;结果浪费了整整一个上午&#xff0c;并且问题并没有全部解决....后来没办法&#xff0c;用了touchmove模拟的滑动&#xff0c;如果有好的解决方法麻烦告诉我...非常感谢~ 一、问题 其实我想要实现的功能很简单&#xff0c;就是一…

Dubbo—Admin 整体架构与安装步骤

​回顾 Dubbo 服务治理体系的总体架构&#xff0c;Admin 是服务治理控制面中的一个核心组件&#xff0c;负责微服务集群的服务治理、可视化展示等。 Admin 部署架构 总体上来说&#xff0c;Admin 部署架构分为以下几个部分&#xff1a; Admin 主进程&#xff0c;包括服务发现…

表单规定输入域的选项列表(html5新元素)

datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时&#xff0c;浏览器应该在该域中显示填写的选项&#xff1a; 使用 input元素的列表属性与datalist元素绑定. 还有一定的搜索能力&…