Я пишу пользовательскую аннотацию Java для обработки CrudRepositories с отражением в Java Spring. С библиотекой org.reflections.reflections. Я получаю все интерфейсы, аннотированные моей аннотацией в виде файла класса, например:
Reflections reflections = new Reflections("basePackage");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(MyAnnotation.class);
Только интерфейсы, которые в какой-то момент расширяют JpaRepository, аннотируются мой @MyAnnotation
на уровне класса.
Моя структура хранилища выглядит следующим образом: Есть два случая,
первый случай:
public interface SomeRepo extends JpaRepository<SomeEntity, Long> {...}
второй случай составлен из иерархии наследования:
public interface SuperClassRepo <T extends SomeRandomEntity> extends JpaRepository<T, String> {...}
public interface SubClassRepo extends SuperClassRepo<SubEntityOfSomeRandomEntity> {...}
Теперь моя цель - извлечь род c параметры типа базового JpaRepository. Я добился этого, если аннотированный класс - это класс Java, а не интерфейс. Как я могу добиться того же для интерфейса? Думаю, у меня тоже проблемы из-за наследства. Я думаю, мне нужно получить «суперкласс», пока я не достигну JpaRepository, а затем немного извлечь аргументы типа generi c.
Помощь очень ценится, заранее спасибо