zoukankan      html  css  js  c++  java
  • Spring Boot实现自定义注解

    在Spring Boot项目中可以使用AOP实现自定义注解,从而实现统一、侵入性小的自定义功能。
    实现自定义注解的过程也比较简单,只需要3步,下面实现一个统一打印日志的自定义注解:

    1. 引入AOP依赖

    在pom文件中引入AOP的依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    

    2. 定义注解

    定义注解的属性:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface TraceLog {
    
        /**
         * 业务
         */
        String business();
    
        /**
         * 模块
         */
        String module();
    }
    

    3. 定义切面

    @Aspect
    @Component
    @Slf4j
    public class TraceLogSupport {
    
        @Pointcut("@annotation(com.acode.log.annotation.TraceLog)")
        private void pointcut() {
        }
    
        @Before("pointcut()&&@annotation(traceLog)")
        public void before(JoinPoint joinPoint, TraceLog traceLog) {
            Object[] args = joinPoint.getArgs();
            log.error(generateLog(traceLog, JSON.toJSONString(args)));
        }
    
        private String generateLog(TraceLog traceLog, String args) {
            List<String> elements = ImmutableList.of(
                    traceLog.business(),
                    traceLog.module(),
                    args
            );
            return String.join(";", elements);
        }
    }
    

    使用注解

    在想要使用的方法上加上注解即可,使用例子如下:

        @RequestMapping("/login")
        @TraceLog(business = "CRM", module = "LOGIN")
        public String login(LoginParam param) {
            return param.toString();
        }
    

    其中,入参的定义如下:

    public class LoginParam {
    
        private String userName;
    
        private String password;
    }
    

    当访问登录接口时,就会在日志中打印入口参数(在线上环境中是不允许直接明文打印用户的密码):

    CRM;LOGIN;[{"password":"123456","userName":"admin"}]
    
  • 相关阅读:
    DP——斜率优化
    题解报告——数三角形
    题解报告——货车运输
    题解报告——油滴扩展
    题解报告——程序补丁
    题解报告——奖励关
    用bitset解决背包问题
    题解报告——矩阵操作
    题解报告——数列
    题解报告——窗口的星星
  • 原文地址:https://www.cnblogs.com/acode/p/11189833.html
Copyright © 2011-2022 走看看