zoukankan      html  css  js  c++  java
  • 【springboot】org.aspectj.lang.ProceedingJoinPoint获取返回类型、参数名称/值等

    1、参数值

    Object[] args = joinPoint.getArgs();

     2、参数名称

    Signature signature = joinPoint.getSignature();
    if (signature instanceof MethodSignature) {
        MethodSignature methodSignature = (MethodSignature) signature;
        String[] properties = methodSignature.getParameterNames();
    }

    3、返回类型

    Signature signature = joinPoint.getSignature();
    if (signature instanceof MethodSignature) {
        MethodSignature methodSignature = (MethodSignature) signature;
        // 被切的方法
        Method method = methodSignature.getMethod();
        // 返回类型
        Class<?> methodReturnType = method.getReturnType();
        // 实例化
        Object o = methodReturnType.newInstance();
    }

    4、全限定类名

    Signature signature = joinPoint.getSignature();
    signature.getDeclaringTypeName()

    5、方法名

    Signature signature = joinPoint.getSignature();
    signature.getName()

    工具类方法

    /**
     * 获取方法和参数内容
     *
     * @param className 类名 非必填
     * @param mothodName 方法名 必填
     * @param properties 参数名称列表
     * @param agrs 参数列表
     * @return
     */
    public static String getMothodPropertion(String className, String mothodName, String[] properties, Object ... agrs) {
        StringBuilder sb = new StringBuilder();
        if(null != className) {
            sb.append("类名:[").append(className).append("],");
        }
        sb.append("方法:[").append(mothodName).append("]");
        if (null == agrs) {
            return sb.toString();
        }
        boolean flag = null != properties;
        int propertiesLength = properties.length;
        Object obj;
        for(int i = 0, length = agrs.length; i < length; i++) {
            obj = agrs[i];
            sb.append("
    参数索引:[").append(i).append("],");
            if (flag && i < propertiesLength) {
                sb.append("参数名称:[").append(properties[i]).append("],");
            }
            if(null == obj) {
                sb.append("为null");
                continue;
            }
            sb.append("类型:[").append(obj.getClass().getName()).append("],");
            if(obj instanceof Collection) {
                Collection collection = (Collection)obj;
                sb.append("长度:[").append(collection.size()).append("],内容:[").append(collection);
            } else if(obj instanceof Map) {
                Map map = (Map)obj;
                sb.append("长度:[").append(map.size()).append("],内容:[").append(map);
            } else if(obj instanceof Object[]) {
                Object[] objects = (Object[])obj;
                sb.append("长度:[").append(objects.length).append("],内容:[").append(Arrays.asList(objects));
            } else if(obj instanceof String) {
                sb.append("内容:[").append(obj);
            } else {
                sb.append("内容:[").append(String.valueOf(obj));
            }
            sb.append("]");
        }
        return sb.toString();
    }

    效果如下

  • 相关阅读:
    监控里的主码流和子码流是什么意思
    监控硬盘容量计算
    一个能让你了解所有函数调用顺序的Android库
    电工选线
    oracle linux dtrace
    list all of the Oracle 12c hidden undocumented parameters
    Oracle Extended Tracing
    window 驱动开发
    win7 x64 dtrace
    How to Use Dtrace Tracing Ruby Executing
  • 原文地址:https://www.cnblogs.com/xiaostudy/p/12530587.html
Copyright © 2011-2022 走看看