如何使用反射库 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) {
// ..
}
}
}
}
我有一个注释@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) {
// ..
}
}
}
}