注解应用:打印日志
1.定义注解
/**
* 打印
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MethodLog {
/**
* 需要打印入参
* @return
*/
boolean needPrintArgs() default true;
/**
* 需要打印返回值
* @return
*/
boolean needReturnT() default true;
/**
* 方法的描述
* @return
*/
String methodDesc() default "";
/**
* 参数的描述(数组)
* @return
*/
String[] paramsDesc() default {
};
/**
* 返回值的描述
* @return
*/
String returnDesc() default "返回值";
}
2.借助切面来获取方法传参、返回值和方法的注解
/**
* aop获取传参跟返回值 -- 支持方法维度切换
*/
@Aspect
@Component
@Slf4j
public class MethodLogAspect {
/**
* 定义切点
*/
@Pointcut(value = "@annotation(com.baturu.biz.common.annotation.MethodLog)")
public void log() {
}
/**
* 使用环绕通知打印日志
* @param joinPoint
* @return
* @throws Throwable
*/
@Around("log()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodLog methodLog = this.getMethodLog(joinPoint);
if(methodLog == null){
Object result = joinPoint.proceed();
return result;
}
//拼接调用方法前的日志