springBoot自定义注解

背景知识

在Java中注解分为两种,元注解和自定义注解。

什么是自定义注解:开发者自己定义的注解,包括框架提供的例如spring框架提供的@Value @Autowired等等。
什么是元注解:描述注解的注解(为自定义注解服务)。

JDK提供了四个标准的元注解:

springBoot自定义注解_第1张图片

自定义注解

··· java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLog {

// 描述方法
String value() default "";

}
···

定义切面类

@Slf4j
@Aspect
@Component
public class LogAspect {

    /**
     * 环绕切入带有@myLog注解的方法
     */
    @Around("@annotation(myLog)")
    public Object around(ProceedingJoinPoint point, MyLog myLog) throws Throwable {
        // 通过获取目前class对象
        Class<?> aClass = point.getTarget().getClass();
        // 获取类名
        String className = aClass.getName();
        // 获取目标方法名称
        String methodName = point.getSignature().getName();

        // 获取MyLog注解参数
        String value = myLog.value();
        // 方法参数
        Object[] args = point.getArgs();
        StringBuffer stringBuffer = new StringBuffer();
        for (Object arg : args) {
            stringBuffer.append(arg).append("\\");
        }
        UUID uuid = UUID.randomUUID();
        log.info("MyLog-{},类名[{}],方法名[{}],注解值[{}],方法参数[{}]", uuid, className, methodName, value, stringBuffer.toString());

        long startTime = System.currentTimeMillis();
        Object proceed = point.proceed();
        long endTime = System.currentTimeMillis();

        log.info("MyLog-{},类名[{}],方法名[{}],注解值[{}],方法耗时[{}],返回值[{}]", uuid, className, methodName, value, endTime - startTime, proceed.toString());
        return proceed;
    }

}

测试

@RestController
public class UserController {

    @MyLog("获取用户信息")
    @GetMapping("/getUserInfo")
    public String getUserInfo(Integer id, String name) {
        System.out.println(id + "   " + name);
        return id + "-" + name;
    }

    @MyLog("删除用户信息")
    @GetMapping("/deleteUser")
    public String deleteUser(Integer id) {
        System.out.println("删除用户" + id);
        return "删除用户" + id + "成功";
    }

}

浏览器访问:http://127.0.0.1:8080/getUserInfo?id=1&name=zhanshan
查看控制台信息即可。

参考1
参考2

你可能感兴趣的:(Java基础,spring,boot,java,spring)