Spring aop自定义注解

 
 
// 自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintLog {
    String method();
    String user() default "sys";
}

//aop
@Aspect
@Slf4j
@Component
public class PrintLogAop {

    @Pointcut("@annotation(com.chinawayltd.fms.util.PrintLog)")
    public void printLog(){};

    @Around("printLog()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
       Method method=((MethodSignature)joinPoint.getSignature()).getMethod();
       PrintLog printLog=method.getAnnotation(PrintLog.class);
       log.info("方法执行前,method={}; user={}",printLog.method(),printLog.user());
       Object o=joinPoint.proceed();
       log.info("方法执行完");
       return o;
    }
}

//使用
@RestController
@RequestMapping("/log")
public class PrintLogController {

    @GetMapping("/print")
    @PrintLog(method = "ok")
    public String ok(){
        return "ok";
    }
}

 

posted @ 2022-02-07 10:40  huiyii  阅读(153)  评论(0编辑  收藏  举报