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
查看控制台信息即可。
以上是关于springBoot自定义注解的主要内容,如果未能解决你的问题,请参考以下文章
210630:springBoot自动配置-自定义start