public class

ClassPathScanningCandidateComponentProvider

extends Object
implements ResourceLoaderAware EnvironmentCapable
java.lang.Object
   ↳ org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
Known Direct Subclasses

Class Overview

A component provider that scans the classpath from a base package. It then applies exclude and include filters to the resulting classes to find candidates.

This implementation is based on Spring's MetadataReader facility, backed by an ASM org.springframework.asm.ClassReader ClassReader.

Summary

Fields
protected final Log logger
Public Constructors
ClassPathScanningCandidateComponentProvider(boolean useDefaultFilters)
Create a ClassPathScanningCandidateComponentProvider.
Public Methods
void addExcludeFilter(TypeFilter excludeFilter)
Add an exclude type filter to the front of the exclusion list.
void addIncludeFilter(TypeFilter includeFilter)
Add an include type filter to the end of the inclusion list.
Set<BeanDefinition> findCandidateComponents(String basePackage)
Scan the class path for candidate components.
Environment getEnvironment()
Return the Environment for this object
final ResourceLoader getResourceLoader()
Return the ResourceLoader that this component provider uses.
void resetFilters(boolean useDefaultFilters)
Reset the configured type filters.
void setEnvironment(Environment environment)
Set the Environment to use when resolving placeholders and evaluating @Profile-annotated component classes.
void setResourceLoader(ResourceLoader resourceLoader)
Set the ResourceLoader to use for resource locations.
void setResourcePattern(String resourcePattern)
Set the resource pattern to use when scanning the classpath.
Protected Methods
boolean isCandidateComponent(MetadataReader metadataReader)
Determine whether the given class does not match any exclude filter and does match at least one include filter.
boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition)
Determine whether the given bean definition qualifies as candidate.
void registerDefaultFilters()
Register the default filter for @Component.
String resolveBasePackage(String basePackage)
Resolve the specified base package into a pattern specification for the package search path.
[Expand]
Inherited Methods
From class java.lang.Object
From interface org.springframework.context.ResourceLoaderAware
From interface org.springframework.core.env.EnvironmentCapable

Fields

protected final Log logger

Public Constructors

public ClassPathScanningCandidateComponentProvider (boolean useDefaultFilters)

Create a ClassPathScanningCandidateComponentProvider.

Parameters
useDefaultFilters whether to register the default filters for the @Component, @Repository, @Service, and @Controller stereotype annotations

Public Methods

public void addExcludeFilter (TypeFilter excludeFilter)

Add an exclude type filter to the front of the exclusion list.

public void addIncludeFilter (TypeFilter includeFilter)

Add an include type filter to the end of the inclusion list.

public Set<BeanDefinition> findCandidateComponents (String basePackage)

Scan the class path for candidate components.

Parameters
basePackage the package to check for annotated classes
Returns
  • a corresponding Set of autodetected bean definitions

public Environment getEnvironment ()

Return the Environment for this object

public final ResourceLoader getResourceLoader ()

Return the ResourceLoader that this component provider uses.

public void resetFilters (boolean useDefaultFilters)

Reset the configured type filters.

Parameters
useDefaultFilters whether to re-register the default filters for the @Component, @Repository, @Service, and @Controller stereotype annotations

public void setEnvironment (Environment environment)

Set the Environment to use when resolving placeholders and evaluating @Profile-annotated component classes.

The default is a DefaultEnvironment

Parameters
environment the Environment to use

public void setResourceLoader (ResourceLoader resourceLoader)

Set the ResourceLoader to use for resource locations. This will typically be a ResourcePatternResolver implementation.

Default is PathMatchingResourcePatternResolver, also capable of resource pattern resolving through the ResourcePatternResolver interface.

Parameters
resourceLoader ResourceLoader object to be used by this object

public void setResourcePattern (String resourcePattern)

Set the resource pattern to use when scanning the classpath. This value will be appended to each base package name.

See Also

Protected Methods

protected boolean isCandidateComponent (MetadataReader metadataReader)

Determine whether the given class does not match any exclude filter and does match at least one include filter.

Parameters
metadataReader the ASM ClassReader for the class
Returns
  • whether the class qualifies as a candidate component
Throws
IOException

protected boolean isCandidateComponent (AnnotatedBeanDefinition beanDefinition)

Determine whether the given bean definition qualifies as candidate.

The default implementation checks whether the class is concrete (i.e. not abstract and not an interface). Can be overridden in subclasses.

Parameters
beanDefinition the bean definition to check
Returns
  • whether the bean definition qualifies as a candidate component

protected void registerDefaultFilters ()

Register the default filter for @Component.

This will implicitly register all annotations that have the @Component meta-annotation including the @Repository, @Service, and @Controller stereotype annotations.

Also supports Java EE 6's javax.annotation.ManagedBean and JSR-330's javax.inject.Named annotations, if available.

protected String resolveBasePackage (String basePackage)

Resolve the specified base package into a pattern specification for the package search path.

The default implementation resolves placeholders against system properties, and converts a "."-based package path to a "/"-based resource path.

Parameters
basePackage the base package as specified by the user
Returns
  • the pattern specification to be used for package searching