aop实现对方法参数的获取

简介: aop实现对方法参数的获取

场景:      需要对入参的数据进行校验,添加相关逻辑或日志监控等

实现方式:  AOP自定义注解+反射

代码:

MyParam

/**
 * 描述:注解
 *
 * @author Administrator
 * @since 2022/7/11
 */
@Target(value = {ElementType.METHOD, ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyParam {
    String value() default "";
}
复制代码

MyParamAsp

/**
 * desc: 具体逻辑 <br>
 * date: 2022/7/11
 *
 * @author Administrator
 */
@Slf4j
@Aspect
@Component
public class MyParamAsp {
    @Pointcut("@annotation(com.zyjournals.web.miniprogram.config.anno.MyParam)")
    public void controllerAspect() {
    }
    @Before("controllerAspect()")
    public void doBefore() {
        log.info("===========================>AOP Before");
    }
    /**
     * desc: aop after <br>
     * date: 2022/7/11
     *
     * @author Administrator
     */
    @After("controllerAspect()")
    public void doAfter(JoinPoint joinPoint) throws NoSuchMethodException {
        log.info("===========================>AOP After");
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        // 请求的方法参数值
        Object[] args = joinPoint.getArgs();
        // 请求的方法参数名称
        LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
        String[] paramNames = u.getParameterNames(method);
        if (args != null && paramNames != null) {
            String params = "";
            for (int i = 0; i < args.length; i++) {
                params += "  " + paramNames[i] + ": " + args[i];
                System.out.println("params = " + params);
            }
        }
    }
}
复制代码

使用:

@MyParam("flag")
public void testAop(String flag , String tag) {
    log.info("===========================>测试方法执行了");
}


相关文章
|
6月前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
380 2
|
3月前
|
Java Spring 容器
SpringBoot整合AOP实现打印方法执行时间切面
SpringBoot整合AOP实现打印方法执行时间切面
45 1
|
3月前
|
Java
Java aop 如何获取方法的参数体
【8月更文挑战第12天】Java aop 如何获取方法的参数体
142 2
|
3月前
|
Java Spring
|
4月前
|
监控 Java Spring
AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
255 1
|
6月前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
6月前
|
Java 测试技术 开发者
【亮剑】通过自定义注解实现Spring AOP,可以更灵活地控制方法拦截和增强
【4月更文挑战第30天】通过自定义注解实现Spring AOP,可以更灵活地控制方法拦截和增强。首先定义自定义注解,如`@MyCustomAnnotation`,然后创建切面类`MyCustomAspect`,使用`@Pointcut`和`@Before/@After`定义切点及通知。配置AOP代理,添加`@EnableAspectJAutoProxy`到配置类。最后,在需拦截的方法上应用自定义注解。遵循保持注解职责单一、选择合适保留策略等最佳实践,提高代码可重用性和可维护性。记得测试AOP逻辑。
207 1
|
6月前
|
前端开发 Java
干货文:SpringBoot 配置 AOP 打印请求参数和返回参数
干货文:SpringBoot 配置 AOP 打印请求参数和返回参数
655 1
|
6月前
|
Java
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
31 0
|
6月前
|
安全 前端开发 Java
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)3
Java反射详解,学以致用,实战案例(AOP修改参数、Mybatis拦截器实现自动填充)
120 0