Вы можете достичь этого, используя Google Guava и API отражения Java.
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
Google Guava включает в себя класс ClassPath с три метода сканирования для классов верхнего уровня, в том, что вы можете использовать getTopLevelClasses(String packageName)
См этот пример кода.
public void getClassOfPackage(String packagenom) {
final ClassLoader loader = Thread.currentThread()
.getContextClassLoader();
try {
ClassPath classpath = ClassPath.from(loader); // scans the class path used by classloader
for (ClassPath.ClassInfo classInfo : classpath.getTopLevelClasses(packagenom)) {
if(!classInfo.getSimpleName().endsWith("_")){
System.out.println(classInfo.getSimpleName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
Ниже код будет печатать все @RequestMapping из одного контроллера, вы можете обновить этот код.
Class clazz = Class.forName("com.abc.cbe.rest.controller.MyController"); // or list of controllers, //you can iterate that list
for(Method method :clazz.getMethods()){
for(Annotation annotation :method.getDeclaredAnnotations()){
if(annotation.toString().contains("RequestMapping"))
System.out.println("Annotation is..."+ annotation.toString());
}
}
Метод 'getClassOfPackage' не работает: на консоли нет выхода! Я уже добавил зависимость в pom.xml и обновил проект. – pheromix
Я тестировал этот код, прежде чем делиться здесь, вы отлаживали? –
Какие строки следует отлаживать? – pheromix