Java注解获取方法入参

简介

在Java开发中,我们经常会使用注解来为我们的代码添加一些元数据或者标记,以实现特定的功能。其中,获取方法的入参是一项常见的需求。本文将教你如何使用Java注解来获取方法的入参。

流程概述

以下是实现“Java注解获取方法入参”的基本步骤:

步骤 描述
第一步 定义一个用于获取方法入参的注解
第二步 使用自定义注解标注需要获取入参的方法
第三步 利用反射机制获取方法入参

下面将详细介绍每个步骤的具体实现。

第一步:定义注解

首先,我们需要定义一个注解用于标记需要获取入参的方法。我们将这个注解命名为GetMethodParams,并在该注解中定义一个空的value属性,用于后续获取入参使用。

public @interface GetMethodParams {
    // 空属性,用于后续获取入参使用
    String value() default "";
}

第二步:使用注解

接下来,我们需要使用自定义注解GetMethodParams来标记需要获取入参的方法。在需要获取入参的方法前添加该注解即可。

public class MyClass {
    @GetMethodParams
    public void myMethod(String param1, int param2) {
        // 方法体
    }
}

第三步:利用反射获取入参

最后,我们利用反射机制来获取被GetMethodParams注解标记的方法的入参。

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 获取 MyClass 类的所有方法
        Method[] methods = MyClass.class.getDeclaredMethods();
        
        // 遍历所有方法
        for (Method method : methods) {
            // 判断方法是否标记了 GetMethodParams 注解
            if (method.isAnnotationPresent(GetMethodParams.class)) {
                // 获取方法的入参类型
                Class<?>[] parameterTypes = method.getParameterTypes();
                
                // 获取方法的参数名称
                String[] parameterNames = getParameterNames(method);
                
                // 将入参类型和参数名称组装成一个 List
                List<String> params = new ArrayList<>();
                for (int i = 0; i < parameterTypes.length; i++) {
                    params.add(parameterTypes[i].getSimpleName() + " " + parameterNames[i]);
                }
                
                // 打印方法名和入参信息
                System.out.println("方法名:" + method.getName());
                System.out.println("入参信息:" + params);
            }
        }
    }
    
    // 获取方法的参数名称
    private static String[] getParameterNames(Method method) {
        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
        String[] parameterNames = new String[parameterAnnotations.length];
        for (int i = 0; i < parameterAnnotations.length; i++) {
            for (Annotation annotation : parameterAnnotations[i]) {
                if (annotation instanceof GetMethodParams) {
                    GetMethodParams getMethodParams = (GetMethodParams) annotation;
                    parameterNames[i] = getMethodParams.value();
                }
            }
        }
        return parameterNames;
    }
}

以上代码实现了获取被GetMethodParams注解标记方法的入参类型和参数名称,并打印出来。

序列图

以下是上述代码的序列图:

sequenceDiagram
    participant MyClass
    participant Main
    MyClass->>Main: 获取 MyClass 类的所有方法
    loop For each method
        Main->>Main: 判断方法是否标记了 GetMethodParams 注解
        alt Method marked with GetMethodParams
            Main->>Method: 获取方法的入参类型
            Main->>Method: 获取方法的参数名称
            Main->>Method: 将入参类型和参数名称组装成 List
            Main->>Main: 打印方法名和入参信息
        end
    end