springBoot自定义注解

Posted amcomputer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot自定义注解相关的知识,希望对你有一定的参考价值。

背景知识

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

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

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

自定义注解

··· 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

以上是关于springBoot自定义注解的主要内容,如果未能解决你的问题,请参考以下文章

210630:springBoot自动配置-自定义start

springBoot自定义注解

springBoot自定义注解

SpringBoot自定义校验注解

SpringBoot Starter自定义注解 - 接口加解密

Springboot注解整理 二《自定义注解》