gpt4 book ai didi

java - 获取包中具有特定注释的所有方法

转载 作者:行者123 更新时间:2023-11-30 07:45:27 25 4
gpt4 key购买 nike

我知道我们可以在一个类中获取所有带有特定注释的方法。但我希望所有方法都包含在带有该注释的包中。我的用例:我想注释和识别几组方法,并要求我的用户选择其中一个添加到要执行的流程中。

@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD })
public @interface Step {
String Type();// default "Trigger";
String SubType();
String [] tags();
}

public interface APITrigger {

@Step(Type = "TRIGGER", SubType = "GET_CLASS_INSTANCE", tags = { "trigger", "build instance", "class object" })
public Object getClassInstance(@NonNull final String packageNclassName)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, NoSuchFieldException;

@Step(Type = "TRIGGER", SubType = "INVOKE_API_N_RETURN", tags = { "trigger", "hit api", "trigger api and return" })
public Map<Class<?>, Object> invokeOveloadedAPINReturn(@NonNull final Object classInstance,
@NonNull final String methodName);
}
public interface Comparator {

@Step(Type = "COMPARATOR", SubType = "GENERIC_COMPARATOR", tags = { "compare", "expected", "observed", "any type", "generic comparator" })
public <T> ComparisonResult Compare(T Expected, T Observed);

}

我想要方法列表 [getclassinstance、invokeOveloadedAPINReturn、Compare],因为这三个方法都用 Step 注释。我们可以通过反射(reflection)来做到这一点吗?另外,我们是否也可以使用注释中的变量来限制我们的搜索?

最佳答案

最好的方法是使用 Reflections(这是这个库的名称),它允许对类路径进行非常简单的扫描,以查找具有给定注释的类或方法。

Set<Method> methodsAnnotatedWith = new Reflections("my.package", new MethodAnnotationsScanner()).getMethodsAnnotatedWith(SomeAnnotation.class);

如果你出于某种原因想自己写一个,那么你需要从给定的类加载器中获取类路径和 url 以手动扫描给定位置的类文件以加载它们并检查它们是否提供了注释/方法。该库还可以在不加载不需要的类的情况下执行此操作,因为扫描本身不加载类,只会加载与您的“查询”匹配的类。 (它通过将 .class 文件加载到自己的数据结构来实现)

关于java - 获取包中具有特定注释的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com