0
点赞
收藏
分享

微信扫一扫

基于springboot自定义日志注解

90哦吼 2022-03-12 阅读 64

使用AOP实现自定义的日志注解

最近在学习反射和注解的使用,以及AOP思想,觉得自定义注解挺好玩的,在此记录一下学习经验
1.自定义注解
2.自定义AOP切面
3.使用自定义注解

自定义注解

//配置注解的使用范围,可以是数组类型
//这里配置的METHOD是表示可以使用再方法上,具体可以查看ElementType类
@Target(ElementType.METHOD)
//配置注解的有效期 RUNTIME表示运行期时有效
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLogger {
    String value() default "";
}

自定义AOP切面

需要引入spring的aop包

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
/**
 * 自定义注解切面类
 */
//Aspect定义为切面类
@Aspect
//注入spring中
@Component
public class CustomAnnotationAspect {
    Logger logger = LoggerFactory.getLogger(CustomAnnotationAspect.class);
//    配置植入点 @annotation中配置注解类
    @Pointcut("@annotation(com.wzzx.basic.component.annotation.MyLogger)")
    public void MyLoggerAspect(){};
//   环绕增强
    @Around("MyLoggerAspect()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //获取类名
        String className = joinPoint.getTarget().getClass().getName();
//        获取方法名
        String methodName = joinPoint.getSignature().getName();
//        获取入参
        Object []  array = joinPoint.getArgs();
        ObjectMapper objectMapper = new ObjectMapper();
        logger.info("调用前:"+className+":"+methodName+";入参:"+objectMapper.writeValueAsString(array));
        //调用方法,并获取返回值
        Object object=joinPoint.proceed();
        logger.info("调用后:"+className+":"+methodName+";返回值:"+objectMapper.writeValueAsString(object));
        return object;
    }
}

使用自定义注解

在方法上加上注解即可
在这里插入图片描述
查看后台打印输入的日志
在这里插入图片描述

举报

相关推荐

0 条评论