1、定义注解

复制代码
package com.example.demo.anno;

import java.lang.annotation.*;

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ReqParamAssembler {

    // 需设置的参数字符串(逗号隔开)
    String values() default "";
}
复制代码

 

 

2、使用注解

 

    @GetMapping("/test")
    @ReqParamAssembler(values = "11,22")
    public ResultModel<Map<String,Object>> test(HttpServletRequest request) {
}

 

3、aop处理注解

复制代码
package com.example.demo.aop;

import com.example.demo.anno.ReqParamAssembler;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

@Slf4j
@Component
@Aspect
public class AnnoAspect {

    @Pointcut("execution(* com.example.demo.controller.*Controller.*(..))")
    public static void doPointcut() {
        System.out.println("这个方法不会被执行,它只是负责描述切入点");
    }

    @Before("doPointcut() && @annotation(reqParamAssembler)")
    public void doBefore(JoinPoint joinPoint, ReqParamAssembler reqParamAssembler) {
        String values = reqParamAssembler.values();
        List<String> arr = Arrays.asList(values.split(","));

        // 参数集合
        Object[] objs = joinPoint.getArgs();

        System.out.println("参数是:" + objs);
        System.out.println("anno:" + arr.toString());
    }
}
复制代码