美文网首页
自定义注解搭配AOP使用

自定义注解搭配AOP使用

作者: 一叶知秋_zgx | 来源:发表于2021-01-06 17:02 被阅读0次

首先叙述一下业务,在每个模块中达到某要求时都要给当前用户添加积分,所以这里用到了注解搭配AOP。

首先自定义一个注解

/**
 * @author zhangGX
 * @date 2021-01-06 16:40
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AddPoint {

    /**
     * 是否入库
     * @return
     */
    boolean  add() default true;
}
/**
 * @author zhangGX
 * @date 2021-01-06 16:41
 */
@Aspect
@Component
public class AddPointAspect {
    private static final Logger logger = LoggerFactory.getLogger(AddPointAspect.class);

    //切入点是自定义注解类的地址
    @Pointcut("@annotation(org.cqbanxi.smartcity.common.biz.anno.AddPoint)")
    public void aspect() {
    }

    @Around("aspect()")
    public void addPoint(ProceedingJoinPoint point) throws Throwable {
        //执行调用者类中的方法
        point.proceed();

        Signature signature = point.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        //获取注解中的属性  判断是否进行入库
        AddPoint addPoint = method.getAnnotation(AddPoint.class);
        if(addPoint.add()){
            System.out.println("入库成功");
        } else {
            System.out.println("入库失败");
        }
    }


    /**
     * 异常通知 用于拦截记录异常日志
     *
     * @param joinPoint
     * @param e
     */
    @AfterThrowing(pointcut = "aspect()", throwing = "e")
    public void doAfterThrowing(JoinPoint joinPoint, Throwable e) {
        try {
            System.out.println("=====异常通知开始=====");
            System.out.println("异常代码:" + e.getClass().getName());
            System.out.println("异常信息:" + e.getMessage());
            System.out.println("异常方法:" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()") + "." + operationType);
            System.out.println("方法描述:" + operationName);
            System.out.println("=====异常通知结束=====");
        } catch (Exception ex) {
            //记录本地异常日志  
            logger.error("==异常通知异常==");
            logger.error("异常信息:{}", ex.getMessage());
        }
        /*==========记录本地异常日志==========*/
        logger.error("异常方法:{}异常代码:{}异常信息:{}参数:{}", joinPoint.getTarget().getClass().getName() + joinPoint.getSignature().getName(), e.getClass().getName(), e.getMessage());

    }
}
/**
     * 这是调用者的业务模块 这里让线程休眠了5秒 为了判断是调用者先执行 还是切入点先执行 
     * @throws InterruptedException
     */
    @AddPoint(add = true)
    public void addPoint() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("添加积分成功");
    }

相关文章

  • Spring boot 使用Aop

    AOP及自定义注解使用Spring boot 使用AopJava自定义注解 Aop即为切面编程,通常以下几个场景回...

  • Java自定义注解

    AOP及自定义注解使用Spring boot 使用AopJava自定义注解 定义 注解是一种能被添加到java源代...

  • 自定义注解搭配AOP使用

    首先叙述一下业务,在每个模块中达到某要求时都要给当前用户添加积分,所以这里用到了注解搭配AOP。 首先自定义一个注解

  • Java 自定义注解及使用场景

    Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优...

  • Java自定义注解

    Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优...

  • Java实现自定义注解

    Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优...

  • 注解

    理解注解 自定义注解实现aop

  • Spring Boot使用RateLimiter通过AOP方式进

    1、引入依赖 2、自定义注解 3、AOP实现类 4、使用

  • SpringBoot MySQL 多数据源配置

    通过自定义注解,AOP,AbstractRoutingDataSource 实现 定义 DataSource 注解...

  • 缓存击穿解决方案

    代码逻辑如下: 自定义注解 aop方案

网友评论

      本文标题:自定义注解搭配AOP使用

      本文链接:https://www.haomeiwen.com/subject/aufooktx.html