public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateComponentProvider
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 ManagedBean and
JSR-330's Named annotations, if available.
AnnotationConfigApplicationContext.scan(java.lang.String...),
Component,
Repository,
Service,
Controllerlogger| Constructor and Description |
|---|
ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
Create a new
ClassPathBeanDefinitionScanner for the given bean factory. |
ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters)
Create a new
ClassPathBeanDefinitionScanner for the given bean factory. |
ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters,
org.springframework.core.env.Environment environment)
Create a new
ClassPathBeanDefinitionScanner for the given bean factory and
using the given Environment when evaluating bean definition profile metadata. |
ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters,
org.springframework.core.env.Environment environment,
org.springframework.core.io.ResourceLoader resourceLoader)
Create a new
ClassPathBeanDefinitionScanner for the given bean factory and
using the given Environment when evaluating bean definition profile metadata. |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
checkCandidate(String beanName,
org.springframework.beans.factory.config.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.
|
protected Set<org.springframework.beans.factory.config.BeanDefinitionHolder> |
doScan(String... basePackages)
Perform a scan within the specified base packages,
returning the registered bean definitions.
|
org.springframework.beans.factory.support.BeanDefinitionDefaults |
getBeanDefinitionDefaults()
Return the defaults to use for detected beans (never
null). |
org.springframework.beans.factory.support.BeanDefinitionRegistry |
getRegistry()
Return the BeanDefinitionRegistry that this scanner operates on.
|
protected boolean |
isCompatible(org.springframework.beans.factory.config.BeanDefinition newDefinition,
org.springframework.beans.factory.config.BeanDefinition existingDefinition)
Determine whether the given new bean definition is compatible with
the given existing bean definition.
|
protected void |
postProcessBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition beanDefinition,
String beanName)
Apply further settings to the given bean definition,
beyond the contents retrieved from scanning the component class.
|
protected void |
registerBeanDefinition(org.springframework.beans.factory.config.BeanDefinitionHolder definitionHolder,
org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
Register the specified bean with the given registry.
|
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(org.springframework.beans.factory.support.BeanDefinitionDefaults beanDefinitionDefaults)
Set the defaults to use for detected beans.
|
void |
setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator beanNameGenerator)
Set the BeanNameGenerator to use for detected bean classes.
|
void |
setIncludeAnnotationConfig(boolean includeAnnotationConfig)
Specify whether to register annotation config post-processors.
|
void |
setScopedProxyMode(ScopedProxyMode scopedProxyMode)
Specify the proxy behavior for non-singleton scoped beans.
|
void |
setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
Set the ScopeMetadataResolver to use for detected bean classes.
|
addExcludeFilter, addIncludeFilter, clearCache, findCandidateComponents, getEnvironment, getMetadataReaderFactory, getResourceLoader, isCandidateComponent, isCandidateComponent, registerDefaultFilters, resetFilters, resolveBasePackage, setEnvironment, setMetadataReaderFactory, setResourceLoader, setResourcePatternpublic ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
ClassPathBeanDefinitionScanner for the given bean factory.registry - the BeanFactory to load bean definitions into, in the form
of a BeanDefinitionRegistrypublic ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters)
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 passed-in bean factory also implements EnvironmentCapable its
environment will be used by this reader. Otherwise, the reader will initialize and
use a StandardEnvironment. All
ApplicationContext implementations are EnvironmentCapable, while
normal BeanFactory implementations are not.
registry - the BeanFactory to load bean definitions into, in the form
of a BeanDefinitionRegistryuseDefaultFilters - whether to include the default filters for the
@Component,
@Repository,
@Service, and
@Controller stereotype annotationsClassPathScanningCandidateComponentProvider.setResourceLoader(org.springframework.core.io.ResourceLoader),
ClassPathScanningCandidateComponentProvider.setEnvironment(org.springframework.core.env.Environment)public ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters,
org.springframework.core.env.Environment environment)
ClassPathBeanDefinitionScanner for the given bean factory and
using the given Environment when evaluating bean definition profile metadata.
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.
registry - the BeanFactory to load bean definitions into, in the form
of a BeanDefinitionRegistryuseDefaultFilters - whether to include the default filters for the
@Component,
@Repository,
@Service, and
@Controller stereotype annotationsenvironment - the Spring Environment to use when evaluating bean
definition profile metadataClassPathScanningCandidateComponentProvider.setResourceLoader(org.springframework.core.io.ResourceLoader)public ClassPathBeanDefinitionScanner(org.springframework.beans.factory.support.BeanDefinitionRegistry registry,
boolean useDefaultFilters,
org.springframework.core.env.Environment environment,
org.springframework.core.io.ResourceLoader resourceLoader)
ClassPathBeanDefinitionScanner for the given bean factory and
using the given Environment when evaluating bean definition profile metadata.registry - the BeanFactory to load bean definitions into, in the form
of a BeanDefinitionRegistryuseDefaultFilters - whether to include the default filters for the
@Component,
@Repository,
@Service, and
@Controller stereotype annotationsenvironment - the Spring Environment to use when evaluating bean
definition profile metadataresourceLoader - the ResourceLoader to usepublic final org.springframework.beans.factory.support.BeanDefinitionRegistry getRegistry()
getRegistry in class ClassPathScanningCandidateComponentProviderpublic void setBeanDefinitionDefaults(org.springframework.beans.factory.support.BeanDefinitionDefaults beanDefinitionDefaults)
BeanDefinitionDefaultspublic org.springframework.beans.factory.support.BeanDefinitionDefaults getBeanDefinitionDefaults()
null).public void setAutowireCandidatePatterns(String... autowireCandidatePatterns)
autowireCandidatePatterns - the patterns to match againstpublic void setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator beanNameGenerator)
Default is a AnnotationBeanNameGenerator.
public void setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
The default is an AnnotationScopeMetadataResolver.
public void setScopedProxyMode(ScopedProxyMode scopedProxyMode)
The default is ScopedProxyMode.NO.
public void setIncludeAnnotationConfig(boolean includeAnnotationConfig)
The default is to register the post-processors. Turn this off to be able to ignore the annotations or to process them differently.
public int scan(String... basePackages)
basePackages - the packages to check for annotated classesprotected Set<org.springframework.beans.factory.config.BeanDefinitionHolder> doScan(String... basePackages)
This method does not register an annotation config processor but rather leaves this up to the caller.
basePackages - the packages to check for annotated classesnull)protected void postProcessBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition beanDefinition,
String beanName)
beanDefinition - the scanned bean definitionbeanName - the generated bean name for the given beanprotected void registerBeanDefinition(org.springframework.beans.factory.config.BeanDefinitionHolder definitionHolder,
org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
Can be overridden in subclasses, e.g. to adapt the registration process or to register further bean definitions for each scanned bean.
definitionHolder - the bean definition plus bean name for the beanregistry - the BeanDefinitionRegistry to register the bean withprotected boolean checkCandidate(String beanName, org.springframework.beans.factory.config.BeanDefinition beanDefinition) throws IllegalStateException
beanName - the suggested name for the beanbeanDefinition - the corresponding bean definitiontrue 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 nameConflictingBeanDefinitionException - if an existing, incompatible
bean definition has been found for the specified nameIllegalStateExceptionprotected boolean isCompatible(org.springframework.beans.factory.config.BeanDefinition newDefinition,
org.springframework.beans.factory.config.BeanDefinition existingDefinition)
The default implementation considers them as compatible when the existing bean definition comes from the same source or from a non-scanning source.
newDefinition - the new bean definition, originated from scanningexistingDefinition - the existing bean definition, potentially an
explicitly defined one or a previously generated one from scanning