Example usage for org.springframework.context.index CandidateComponentsIndex getCandidateTypes

List of usage examples for org.springframework.context.index CandidateComponentsIndex getCandidateTypes

Introduction

In this page you can find the example usage for org.springframework.context.index CandidateComponentsIndex getCandidateTypes.

Prototype

public Set<String> getCandidateTypes(String basePackage, String stereotype) 

Source Link

Document

Return the candidate types that are associated with the specified stereotype.

Usage

From source file:org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.java

private Set<BeanDefinition> addCandidateComponentsFromIndex(CandidateComponentsIndex index,
        String basePackage) {//from   ww  w .  j a  va 2 s .co  m
    Set<BeanDefinition> candidates = new LinkedHashSet<>();
    try {
        Set<String> types = new HashSet<>();
        for (TypeFilter filter : this.includeFilters) {
            String stereotype = extractStereotype(filter);
            if (stereotype == null) {
                throw new IllegalArgumentException("Failed to extract stereotype from " + filter);
            }
            types.addAll(index.getCandidateTypes(basePackage, stereotype));
        }
        boolean traceEnabled = logger.isTraceEnabled();
        boolean debugEnabled = logger.isDebugEnabled();
        for (String type : types) {
            MetadataReader metadataReader = getMetadataReaderFactory().getMetadataReader(type);
            if (isCandidateComponent(metadataReader)) {
                AnnotatedGenericBeanDefinition sbd = new AnnotatedGenericBeanDefinition(
                        metadataReader.getAnnotationMetadata());
                if (isCandidateComponent(sbd)) {
                    if (debugEnabled) {
                        logger.debug("Using candidate component class from index: " + type);
                    }
                    candidates.add(sbd);
                } else {
                    if (debugEnabled) {
                        logger.debug("Ignored because not a concrete top-level class: " + type);
                    }
                }
            } else {
                if (traceEnabled) {
                    logger.trace("Ignored because matching an exclude filter: " + type);
                }
            }
        }
    } catch (IOException ex) {
        throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);
    }
    return candidates;
}