• 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"}]
    
  • 相关阅读:
    NGINX proxy_pass 域名解析问题
    NGINX源码分析——概览
    NGINX源代码自我总结(一)
    XWindow、Server、Client和QT、GTK之间的关系
    UBUNTU 字符界面来回切换
    ECshop 数据库表结构
    通读Cheerio文档
    Node.js 0.12: 正确发送HTTP POST请求
    npm配置镜像、设置代理
    配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
  • 原文地址:https://www.cnblogs.com/acode/p/11189833.html
Copyright © 2020-2023  润新知