Обнаруживает ли EntityScanner абстрактные классы и интерфейсы? (Весенняя загрузка 2.2.6) - PullRequest
1 голос
/ 29 мая 2020

Обнаруживает ли EntityScanner абстрактные классы или интерфейсы, снабженные аннотациями определенного типа c, которые ищет сканер? В моем приложении Spring Boot я использую экземпляр EntityScanner для поиска всех классов, имеющих определенную аннотацию (например, @MyAnnotationType). Однако он не обнаруживает абстрактные классы или интерфейсы с этой аннотацией:

@MyAnnotationType
public interface Foo

Когда я вызываю Set<Class<?>> entityClassSet = entityScanner.scan(MyAnnotationType.class), интерфейс Foo не включается в возвращаемый entityClassSet. То же самое происходит с абстрактными классами с аннотацией @MyAnnotationType. Обратите внимание, что все классы находятся в подпакете пакета @SpringBootApplication classes. Это ожидаемое поведение? Если да, то есть ли альтернатива EntityScanner, которую я могу использовать для обнаружения этих абстрактных классов / интерфейсов? Большое спасибо!

1 Ответ

1 голос
/ 16 июля 2020

Нет, это не так. EntityScanner предназначен только для обнаружения классов. Глядя на реализацию EntityScanner, вы можете увидеть, что он использует ClassPathScanningCandidateComponentProvider под капотом.

Если вам нужно сканировать абстрактные классы или интерфейсы, вы можете использовать это. При этом вам придется переопределить isCandidateComponent.

...