public Set<Class<?>> scanClassesWithAnnotation(String basePackage, Class<? extends Annotation> annotation) {
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new AnnotationTypeFilter(annotation));
Set<BeanDefinition> candidates = provider.findCandidateComponents(basePackage);
Set<Class<?>> classes = new HashSet<>();
for (BeanDefinition candidate : candidates) {
try {
Class<?> clazz = Class.forName(candidate.getBeanClassName());
classes.add(clazz);
} catch (ClassNotFoundException e) {
// Ignore exception
}
}
return classes;
}