如何使用反射库 java 仅在特定 类 中扫描方法中的注解?

How to scan for annotations in methods only in specific classes using reflection library java?

我有一个注释@API,我将其分配给所有路由,即 java spring.What 中控制器中的 RequestMapping 我想做的是,首先扫描所有 类 在一个用@Controller 注释的包中,在扫描所有控制器 类 之后,我只想在这些注释为 类 的控制器中扫描带有注释 @API 的方法。

如何在 java 中使用反射来实现这一点?

  Reflections reflections = new Reflections("my.project.prefix");

  Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);

要使用反射 api 在包中找到包含 @Controller 注释的 类,您可以尝试:

Reflections reflections = new Reflections("my.project.prefix");
Set<Class<?>> classes = reflections
        .getTypesAnnotatedWith(Controller.class);

要使用反射api在包中查找包含@API注解的方法,您可以尝试:

Reflections reflections = new Reflections("my.project.prefix");
Set<Method> methods = reflections
        .getMethodsAnnotatedWith(API.class);

如果您想在 类 中找到带有 @API 注释 且仅包含 @Controller 注释 的方法,您需要编写类似这样的代码:

Reflections reflections = new Reflections("my.project.prefix");
Set<Class<?>> classes = reflections
        .getTypesAnnotatedWith(Controller.class);
for (Class<?> clazz : classes) {
    Method[] methods = clazz.getDeclaredMethods();
    for (Method method : methods) {
        Annotation[] annotations = method.getDeclaredAnnotations();
        for (Annotation annotation : annotations) {
            if (annotation instanceof API) {
                // ..
            }
        }
    }
}