AOP相关一

package com.example.demo.retry;

import com.example.demo.aop.RetryAnno;
import com.example.demo.aop.RetryUtil1;
import com.example.demo.aop.Task;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * @describtion aop异常通知
 * @creator wangli66
 * @create-time 14:19 2019/11/21
 **/
@Aspect
@Component
public class BizAspect {

    /*
     * @Description: 在注解中直接定义切点的方式
     * @param: [e]
     * @return: void
     * @Date: 2019/11/26
     */
    @AfterThrowing(throwing = "e",pointcut = "execution(* com.example.demo.retry.Bizwork.*(..))")
    public void testThrowing(Exception e) {
        System.out.println("aspect.........");
    }

    /*
     * @Description: 单独定义切点
     * @param: []
     * @return: void
     * @Date: 2019/11/26
     */
    @Pointcut("execution(* com.example.demo.retry.Bizwork.*(..))")
    public void workCut() {
    }

    /*
     * @Description: 引入切点
     * @param: [joinPoint]
     * @return: void
     * @Date: 2019/11/26
     */
    @AfterThrowing("workCut()")
    public void testPointCut(JoinPoint joinPoint) {
        System.out.println("testPointCut.......");
        Task task = new Task();
        // 设置参数
        task.setTargetClass(joinPoint.getSignature().getDeclaringTypeName());
        task.setTargetMethod(joinPoint.getSignature().getName());
        task.setArgs(joinPoint.getArgs());
        task.setTimes(3);
        task.setWaitTime(3000L);

        // 调用重试工具类
        RetryUtil1.retryByTask(task);
    }

    /*
     * @Description: 使用自定义注解方式
     * @param: []
     * @return: void
     * @Date: 2019/11/26
     */
    @Pointcut(value = "@annotation(com.example.demo.aop.RetryAnno)")
    public void testAnnoCut() {

    }

    /*
     * @Description: 注解方式
     * @param: [joinPoint]
     * @return: void
     * @Date: 2019/11/21
     */
    @AfterThrowing(value = "@annotation(com.example.demo.aop.RetryAnno) && @annotation(retryAnno)")
    public void testAnnotion(JoinPoint joinPoint,RetryAnno retryAnno) {
        System.out.println("----注解方式------------------------"+retryAnno.maxAttempt());
        Task task = new Task();
        // 设置参数
        task.setTargetClass(joinPoint.getSignature().getDeclaringTypeName());
        task.setTargetMethod(joinPoint.getSignature().getName());
        task.setArgs(joinPoint.getArgs());
        task.setTimes(retryAnno.maxAttempt());
        task.setWaitTime(retryAnno.waitDesc());
        // 调用重试工具类
        RetryUtil1.retryByTask(task);

    }
}

 

posted @   初见洞洞拐  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示