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> result = new LinkedList>(); 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()]); } }