Skip to content

Instantly share code, notes, and snippets.

@virtualadrian
Forked from skempken/Detector.java
Created March 17, 2020 12:35
Show Gist options
  • Save virtualadrian/6fcc19ce42efab9b6bbd48d640512810 to your computer and use it in GitHub Desktop.
Save virtualadrian/6fcc19ce42efab9b6bbd48d640512810 to your computer and use it in GitHub Desktop.
Find all annotated classes in a package using Spring
import java.util.LinkedList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.web.context.support.StandardServletEnvironment;
public class Detector {
private static final Logger LOGGER = LoggerFactory.getLogger(Detector.class);
public Class<?>[] findAllConfigurationClassesInPackage(String packageName) {
final List<Class<?>> result = new LinkedList<Class<?>>();
final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(
true, new StandardServletEnvironment());
provider.addIncludeFilter(new AnnotationTypeFilter(Configuration.class));
for (BeanDefinition beanDefinition : provider
.findCandidateComponents(packageName)) {
try {
result.add(Class.forName(beanDefinition.getBeanClassName()));
} catch (ClassNotFoundException e) {
LOGGER.warn(
"Could not resolve class object for bean definition", e);
}
}
return result.toArray(new Class<?>[result.size()]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment