在SpringAOP中如何获取方法的参数值(实体类)以及参数名

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81901481  废话...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81901481

 废话不多说直接上代码 参数对了效果就可以出来  返回值是一个map key 是参数名称 value 是参数值,

 private static Map getFieldsName(ProceedingJoinPoint joinPoint) throws ClassNotFoundException, NoSuchMethodException {
        String classType = joinPoint.getTarget().getClass().getName();
        String methodName = joinPoint.getSignature().getName();
        // 参数值
        Object[] args = joinPoint.getArgs();
        Class<?>[] classes = new Class[args.length];
        for (int k = 0; k < args.length; k++) {
            if (!args[k].getClass().isPrimitive()) {
                // 获取的是封装类型而不是基础类型
                String result = args[k].getClass().getName();
                Class s = map.get(result);
                classes[k] = s == null ? args[k].getClass() : s;
            }
        }
        ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
        // 获取指定的方法,第二个参数可以不传,但是为了防止有重载的现象,还是需要传入参数的类型
        Method method = Class.forName(classType).getMethod(methodName, classes);
        // 参数名
        String[] parameterNames = pnd.getParameterNames(method);
        // 通过map封装参数和参数值
        HashMap<String, Object> paramMap = new HashMap();
        for (int i = 0; i < parameterNames.length; i++) {
            paramMap.put(parameterNames[i], args[i]);
        }
        return paramMap;
    }

  private static HashMap<String, Class> map = new HashMap<String, Class>() {
        {
            put("java.lang.Integer", int.class);
            put("java.lang.Double", double.class);
            put("java.lang.Float", float.class);
            put("java.lang.Long", long.class);
            put("java.lang.Short", short.class);
            put("java.lang.Boolean", boolean.class);
            put("java.lang.Char", char.class);
        }
    };

 

相关文章
|
Java Spring
Spring AOP切点表达式(Pointcut)详解
Spring 的 AOP 中的一个核心概念是切点(Pointcut),切点表达式定义通知(Advice)执行的范围。
3106 0
|
druid Java 数据库连接
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
SringBoot整合Druid+Mybatisplus实现多数据源
|
11月前
|
Java API Spring
SpringAOP 关键API详解
在Spring AOP中,JoinPoint和ProceedingJoinPoint是两个非常重要的概念,它们都是AOP中的切点。 因此,JoinPoint和ProceedingJoinPoint的区别在于,ProceedingJoinPoint包含了一个proceed()方法,该方法用于执行目标方法,而JoinPoint则不包含该方法。在编写AOP切面时,如果需要在目标方法执行前或执行后做一些处理,可以使用JoinPoint;如果需要在目标方法执行过程中做一些处理,可以使用ProceedingJoinPoint。
420 0
|
Java Spring
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
441 0
|
Java
Java判断url(链接)是否有效
Java判断url(链接)是否有效
593 0
Java判断url(链接)是否有效
|
SQL druid Java
实现SpringBoot项目的多数据源配置的两种方式(dynamic-datasource-spring-boot-starter和自定义注解的方式)
最近项目需要配置多数据源,本项目采用的技术是SpringBoot+mybatis-plus+Druid。为了图个方便直接想直接集成dynamic-datasource-spring-boot-starter进行多数据源配置。
2945 0
实现SpringBoot项目的多数据源配置的两种方式(dynamic-datasource-spring-boot-starter和自定义注解的方式)
|
SQL 存储 NoSQL
SpringBoot整合MongoDB
SpringBoot整合MongoDB
5135 0
SpringBoot整合MongoDB
|
Java Spring
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(下)
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(下)
772 0
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
518 0
Springboot 使用自定义注解结合AOP方式校验接口参数