public class

ClassPathBeanDefinitionScanner

extends ClassPathScanningCandidateComponentProvider
java.lang.Object
   ↳ org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
     ↳ org.springframework.context.annotation.ClassPathBeanDefinitionScanner

Class Overview

A bean definition scanner that detects bean candidates on the classpath, registering corresponding bean definitions with a given registry (BeanFactory or ApplicationContext).

Candidate classes are detected through configurable type filters. The default filters include classes that are annotated with Spring's @Component, @Repository, @Service, or @Controller stereotype.

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

Summary

[Expand]
Inherited Fields
From class org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
Public Constructors
ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry)
Create a new ClassPathBeanDefinitionScanner for the given bean factory.
ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters)
Create a new ClassPathBeanDefinitionScanner for the given bean factory.
Public Methods
final BeanDefinitionRegistry getRegistry()
Return the BeanDefinitionRegistry that this scanner operates on.
int scan(String... basePackages)
Perform a scan within the specified base packages.
void setAutowireCandidatePatterns(String[] autowireCandidatePatterns)
Set the name-matching patterns for determining autowire candidates.
void setBeanDefinitionDefaults(BeanDefinitionDefaults beanDefinitionDefaults)
Set the defaults to use for detected beans.
void setBeanNameGenerator(BeanNameGenerator beanNameGenerator)
Set the BeanNameGenerator to use for detected bean classes.
void setIncludeAnnotationConfig(boolean includeAnnotationConfig)
Specify whether to register annotation config post-processors.
void setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
Set the ScopeMetadataResolver to use for detected bean classes.
void setScopedProxyMode(ScopedProxyMode scopedProxyMode)
Specify the proxy behavior for non-singleton scoped beans.
Protected Methods
boolean checkCandidate(String beanName, BeanDefinition beanDefinition)
Check the given candidate's bean name, determining whether the corresponding bean definition needs to be registered or conflicts with an existing definition.
Set<BeanDefinitionHolder> doScan(String... basePackages)
Perform a scan within the specified base packages, returning the registered bean definitions.
boolean isCompatible(BeanDefinition newDefinition, BeanDefinition existingDefinition)
Determine whether the given new bean definition is compatible with the given existing bean definition.
void postProcessBeanDefinition(AbstractBeanDefinition beanDefinition, String beanName)
Apply further settings to the given bean definition, beyond the contents retrieved from scanning the component class.
void registerBeanDefinition(BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)
Register the specified bean with the given registry.
[Expand]
Inherited Methods
From class org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
From class java.lang.Object
From interface org.springframework.context.ResourceLoaderAware
From interface org.springframework.core.env.EnvironmentCapable

Public Constructors

public ClassPathBeanDefinitionScanner (BeanDefinitionRegistry registry)

Create a new ClassPathBeanDefinitionScanner for the given bean factory.

Parameters
registry the BeanFactory to load bean definitions into, in the form of a BeanDefinitionRegistry

public ClassPathBeanDefinitionScanner (BeanDefinitionRegistry registry, boolean useDefaultFilters)

Create a new ClassPathBeanDefinitionScanner for the given bean factory.

If the passed-in bean factory does not only implement the BeanDefinitionRegistry interface but also the ResourceLoader interface, it will be used as default ResourceLoader as well. This will usually be the case for ApplicationContext implementations.

If given a plain BeanDefinitionRegistry, the default ResourceLoader will be a PathMatchingResourcePatternResolver.

If the the passed-in bean factory also implements EnvironmentCapable its environment will be used by this reader. Otherwise, the reader will initialize and use a DefaultEnvironment. All ApplicationContext implementations are EnvironmentCapable, while normal BeanFactory implementations are not.

Parameters
registry the BeanFactory to load bean definitions into, in the form of a BeanDefinitionRegistry
useDefaultFilters whether to include the default filters for the @Component, @Repository, @Service, and @Controller stereotype annotations.

Public Methods

public final BeanDefinitionRegistry getRegistry ()

Return the BeanDefinitionRegistry that this scanner operates on.

public int scan (String... basePackages)

Perform a scan within the specified base packages.

Parameters
basePackages the packages to check for annotated classes
Returns
  • number of beans registered

public void setAutowireCandidatePatterns (String[] autowireCandidatePatterns)

Set the name-matching patterns for determining autowire candidates.

Parameters
autowireCandidatePatterns the patterns to match against

public void setBeanDefinitionDefaults (BeanDefinitionDefaults beanDefinitionDefaults)

Set the defaults to use for detected beans.

public void setBeanNameGenerator (BeanNameGenerator beanNameGenerator)

Set the BeanNameGenerator to use for detected bean classes.

Default is a AnnotationBeanNameGenerator.

public void setIncludeAnnotationConfig (boolean includeAnnotationConfig)

Specify whether to register annotation config post-processors.

The default is to register the post-processors. Turn this off to be able to ignore the annotations or to process them differently.

public void setScopeMetadataResolver (ScopeMetadataResolver scopeMetadataResolver)

Set the ScopeMetadataResolver to use for detected bean classes. Note that this will override any custom "scopedProxyMode" setting.

The default is an AnnotationScopeMetadataResolver.

public void setScopedProxyMode (ScopedProxyMode scopedProxyMode)

Specify the proxy behavior for non-singleton scoped beans. Note that this will override any custom "scopeMetadataResolver" setting.

The default is NO.

Protected Methods

protected boolean checkCandidate (String beanName, BeanDefinition beanDefinition)

Check the given candidate's bean name, determining whether the corresponding bean definition needs to be registered or conflicts with an existing definition.

Parameters
beanName the suggested name for the bean
beanDefinition the corresponding bean definition
Returns
  • true if the bean can be registered as-is; false if it should be skipped because there is an existing, compatible bean definition for the specified name
Throws
IllegalStateException if an existing, incompatible bean definition has been found for the specified name

protected Set<BeanDefinitionHolder> doScan (String... basePackages)

Perform a scan within the specified base packages, returning the registered bean definitions.

This method does not register an annotation config processor but rather leaves this up to the caller.

Parameters
basePackages the packages to check for annotated classes
Returns
  • set of beans registered if any for tooling registration purposes (never null)

protected boolean isCompatible (BeanDefinition newDefinition, BeanDefinition existingDefinition)

Determine whether the given new bean definition is compatible with the given existing bean definition.

The default implementation simply considers them as compatible when the bean class name matches.

Parameters
newDefinition the new bean definition, originated from scanning
existingDefinition the existing bean definition, potentially an explicitly defined one or a previously generated one from scanning
Returns
  • whether the definitions are considered as compatible, with the new definition to be skipped in favor of the existing definition

protected void postProcessBeanDefinition (AbstractBeanDefinition beanDefinition, String beanName)

Apply further settings to the given bean definition, beyond the contents retrieved from scanning the component class.

Parameters
beanDefinition the scanned bean definition
beanName the generated bean name for the given bean

protected void registerBeanDefinition (BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)

Register the specified bean with the given registry.

Can be overridden in subclasses, e.g. to adapt the registration process or to register further bean definitions for each scanned bean.

Parameters
definitionHolder the bean definition plus bean name for the bean
registry the BeanDefinitionRegistry to register the bean with