如何将重复方法封装为Aop切面并结合注解使用

首先要导入依赖
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
</dependency>
编写注解
package com.yg.domain.note;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @NAME: TODO:MyErrorAop
 * @DATE: 2024/1/12
 * /✖◡✖\-  NoBug
 * @AUTHOR: Mr.zhou
 */

@Target(ElementType.METHOD)//可以用作于方法中
@Retention(RetentionPolicy.RUNTIME)//运行时使用
public @interface MyErrorAop {
}

编写Aop

package com.yg.common;

import com.yg.domain.SysYuangong;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @NAME: TODO:MyErrorAop
 * @DATE: 2024/1/12
 * /✖◡✖\-  NoBug
 * @AUTHOR: Mr.zhou
 */
@Aspect
@Component
public class MyErrorAop {


    @Autowired
    RedisTemplate redisTemplate;
//    扫描目标类
    @Pointcut("@annotation(com.yg.domain.note.MyErrorAop)")
    public void myValid(){
    }


    //TODO:创建切面:防止重复提交
    @Around("myValid()")
    public Object MyAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {


//        获取实体类对象
        SysYuangong arg = (SysYuangong)proceedingJoinPoint.getArgs()[0];

//        判断校验字段是否为空
        if (StringUtils.isBlank(arg.getToken())){
            return ResultModel.error("没有有效token");
        }

//        从redis获取字段
        Boolean aBoolean = redisTemplate.hasKey(arg.getToken());
//        验证
        if (!aBoolean){
            return ResultModel.error("非法token  不能重复提交");
        }
//        执行后续方法
        Object proceed = proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs());

//        删除校验字段
        redisTemplate.delete(arg.getToken());
        return proceed;
    }




}
方法上添加注解
 
然后测试就发现添加代码的方法都可以防止重复提交了!!

最近更新

  1. 自动驾驶技术的原理

    2024-01-14 02:42:01       0 阅读
  2. MySQL中字段的实际长度

    2024-01-14 02:42:01       1 阅读
  3. 通过gateway 打印日志全局控制日志

    2024-01-14 02:42:01       1 阅读
  4. mysql实战入门-基础篇

    2024-01-14 02:42:01       1 阅读
  5. Linux安装Docker以及Docker Componse

    2024-01-14 02:42:01       1 阅读
  6. 通信技术在反无人机中的作用分析

    2024-01-14 02:42:01       1 阅读
  7. FastGPT源码部署,不使用docker

    2024-01-14 02:42:01       1 阅读

热门阅读

  1. Git提交规范

    2024-01-14 02:42:01       48 阅读
  2. C++ 初始化列表

    2024-01-14 02:42:01       48 阅读
  3. 由jar包冲突导致的logback日志不输出

    2024-01-14 02:42:01       38 阅读
  4. SQL概述及SQL分类

    2024-01-14 02:42:01       41 阅读
  5. 原创 | 一文读懂ChatGPT中的强化学习

    2024-01-14 02:42:01       48 阅读
  6. SpringBoot整合MyBatis-Plus

    2024-01-14 02:42:01       40 阅读