I have an annotation @API which I assign to all the routes i.e RequestMapping in a controller in java spring.What I want to do is,First scan all the classes in a package that are annotated with @Controller and after scanning all the controller classes,I want only to scan for Methods with annotation @API in only these controller annotated classes.
How can I implement this in using reflection in java?
Reflections reflections = new Reflections("my.project.prefix");
Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);
Advertisement
Answer
To find the classes containing the @Controller annotation in a package using the reflection api, you can try:
Reflections reflections = new Reflections("my.project.prefix");
Set<Class<?>> classes = reflections
.getTypesAnnotatedWith(Controller.class);
To find the methods that contain the @API annotation in a package using the reflection api, you can try:
Reflections reflections = new Reflections("my.project.prefix");
Set<Method> methods = reflections
.getMethodsAnnotatedWith(API.class);
If you want to find methods with @API annotation inside classes that contain only @Controller annotation, you’ll need to write code similar to this:
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) {
// ..
}
}
}
}