У меня есть файл .class
в каталоге в пакете по умолчанию. Каждый файл имеет класс, и этот класс имеет аннотацию @Service
а метод имеет аннотацию @Operation
.
Я знаю, как читать аннотации во время выполнения, но эти файлы являются.class файлом, и я не знаю, как их читать. в противном случае я хочу написать каждую аннотацию Service
по пути в файле context.xml
и написать каждую операцию в url-образце в файле web.xml
во время выполнения. Как я могу это сделать?
Если вы поместите классы в свой каталог в classpath, вы можете легко получить к ним доступ через API ClassLoader:
Class<?> clazz = this.getClass().getClassLoader().loadClass(className);
Теперь проблема в том, что вы не знаете имена классов, и вы в основном хотите отсканировать их все. Таким образом, вы можете использовать одну из доступных там библиотек. Например, Guava предоставляет API для сканирования пути класса с помощью вспомогательной утилиты ClassPath:
ClassPath classPath = ClassPath.from(this.getClass().getClassLoader());
for (ClassPath.ClassInfo classInfo : classPath.getTopLevelClasses()) {
Class<?> clazz = classInfo.load();
// process annotations here
}