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()); } }
浙公网安备 33010602011771号