public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable
ConfigurableListableBeanFactory
and BeanDefinitionRegistry interfaces: a full-fledged bean factory
based on bean definition metadata, extensible through post-processors.
Typical usage is registering all bean definitions first (possibly read from a bean definition file), before accessing beans. Bean lookup by name is therefore an inexpensive operation in a local bean definition table, operating on pre-resolved bean definition metadata objects.
Note that readers for specific bean definition formats are typically
implemented separately rather than as bean factory subclasses:
see for example PropertiesBeanDefinitionReader and
XmlBeanDefinitionReader.
For an alternative implementation of the
ListableBeanFactory interface,
have a look at StaticListableBeanFactory, which manages existing
bean instances rather than creating new ones based on bean definitions.
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition),
AbstractBeanFactory.addBeanPostProcessor(org.springframework.beans.factory.config.BeanPostProcessor),
getBean(java.lang.Class<T>),
resolveDependency(org.springframework.beans.factory.config.DependencyDescriptor, java.lang.String, java.util.Set<java.lang.String>, org.springframework.beans.TypeConverter),
序列化表格AUTOWIRE_AUTODETECT, AUTOWIRE_BY_NAME, AUTOWIRE_BY_TYPE, AUTOWIRE_CONSTRUCTOR, AUTOWIRE_NOSCOPE_PROTOTYPE, SCOPE_SINGLETONFACTORY_BEAN_PREFIX| 构造器和说明 |
|---|
DefaultListableBeanFactory()
Create a new DefaultListableBeanFactory.
|
DefaultListableBeanFactory(BeanFactory parentBeanFactory)
Create a new DefaultListableBeanFactory with the given parent.
|
| 限定符和类型 | 方法和说明 |
|---|---|
protected boolean |
allowAliasOverriding()
Only allows alias overriding if bean definition overriding is allowed.
|
void |
clearMetadataCache()
Clear the merged bean definition cache, removing entries for beans
which are not considered eligible for full metadata caching yet.
|
boolean |
containsBeanDefinition(String beanName)
Check if this bean factory contains a bean definition with the given name.
|
void |
copyConfigurationFrom(ConfigurableBeanFactory otherFactory)
Copy all relevant configuration from the given other factory.
|
void |
destroySingleton(String beanName)
发生移除,销毁当前bean的所有信息
|
void |
destroySingletons()
Destroy all singleton beans in this factory, including inner beans that have
been registered as disposable.
|
protected String |
determineAutowireCandidate(Map<String,Object> candidates,
DependencyDescriptor descriptor)
Determine the autowire candidate in the given set of beans.
|
protected String |
determineHighestPriorityCandidate(Map<String,Object> candidates,
Class<?> requiredType)
Determine the candidate with the highest priority in the given set of beans.
|
protected String |
determinePrimaryCandidate(Map<String,Object> candidates,
Class<?> requiredType)
Determine the primary candidate in the given set of beans.
|
Object |
doResolveDependency(DependencyDescriptor descriptor,
String beanName,
Set<String> autowiredBeanNames,
TypeConverter typeConverter) |
<A extends Annotation> |
findAnnotationOnBean(String beanName,
Class<A> annotationType)
在指定name对应的Bean上找指定的注解,如果没有找到的话,去指定Bean的父类或者父接口上查找
|
protected Map<String,Object> |
findAutowireCandidates(String beanName,
Class<?> requiredType,
DependencyDescriptor descriptor)
Find bean instances that match the required type.
|
void |
freezeConfiguration()
Freeze all bean definitions, signalling that the registered bean definitions
will not be modified or post-processed any further.
|
AutowireCandidateResolver |
getAutowireCandidateResolver()
Return the autowire candidate resolver for this BeanFactory (never
null). |
<T> T |
getBean(Class<T> requiredType)
通过指定的bean的类型去容器中获取对象 若容器中有多个想同类型的bean
我们通过ctx.getBean(beanType.class) 就会抛出异常
|
<T> T |
getBean(Class<T> requiredType,
Object... args)
获取bean实例
|
BeanDefinition |
getBeanDefinition(String beanName)
从原始的bean定义map中获取
|
int |
getBeanDefinitionCount()
获取容器中的所有bean定义
|
String[] |
getBeanDefinitionNames()
查看此BeanFactory中包含的Bean数量
不支持向上或向下查找
不支持查找非配置文件定义的单例Bean
|
String[] |
getBeanNamesForAnnotation(Class<? extends Annotation> annotationType)
找到所有带有指定注解类型的Bean
|
String[] |
getBeanNamesForType(Class<?> type)
返回此BeanFactory中所有指定类型的Bean的名字。
|
String[] |
getBeanNamesForType(Class<?> type,
boolean includeNonSingletons,
boolean allowEagerInit)
返回此BeanFactory中所有指定类型(或指定类型的子类型)的Bean的名字。
|
String[] |
getBeanNamesForType(org.springframework.core.ResolvableType type)
返回此BeanFactory中所包含的所有Bean定义的名称
不支持向上或向下查找
不支持查找非配置文件定义的单例Bean
|
Iterator<String> |
getBeanNamesIterator()
Return a unified view over all bean names managed by this factory.
|
<T> Map<String,T> |
getBeansOfType(Class<T> type)
返回此BeanFactory中所有指定类型(或指定类型的子类型)的Bean的名字。
|
<T> Map<String,T> |
getBeansOfType(Class<T> type,
boolean includeNonSingletons,
boolean allowEagerInit)
返回此BeanFactory中所有指定类型(或指定类型的子类型)的Bean的名字。
|
Map<String,Object> |
getBeansWithAnnotation(Class<? extends Annotation> annotationType)
找到所有带有指定注解的Bean,返回一个以Bean的name为键,其对应的Bean实例为值的Map
|
Comparator<Object> |
getDependencyComparator()
Return the dependency comparator for this BeanFactory (may be
null. |
protected Integer |
getPriority(Object beanInstance)
Return the priority assigned for the given bean instance by
the
javax.annotation.Priority annotation. |
String |
getSerializationId()
Return an id for serialization purposes, if specified, allowing this BeanFactory
to be deserialized from this id back into the BeanFactory object, if needed.
|
boolean |
isAllowBeanDefinitionOverriding()
Return whether it should be allowed to override bean definitions by registering
a different definition with the same name, automatically replacing the former.
|
boolean |
isAllowEagerClassLoading()
Return whether the factory is allowed to eagerly load bean classes
even for bean definitions that are marked as "lazy-init".
|
boolean |
isAutowireCandidate(String beanName,
DependencyDescriptor descriptor)
Determine whether the specified bean qualifies as an autowire candidate,
to be injected into other beans which declare a dependency of matching type.
|
protected boolean |
isAutowireCandidate(String beanName,
DependencyDescriptor descriptor,
AutowireCandidateResolver resolver)
Determine whether the specified bean definition qualifies as an autowire candidate,
to be injected into other beans which declare a dependency of matching type.
|
protected boolean |
isAutowireCandidate(String beanName,
RootBeanDefinition mbd,
DependencyDescriptor descriptor,
AutowireCandidateResolver resolver)
Determine whether the specified bean definition qualifies as an autowire candidate,
to be injected into other beans which declare a dependency of matching type.
|
protected boolean |
isBeanEligibleForMetadataCaching(String beanName)
Considers all beans as eligible for metadata caching
if the factory's configuration has been marked as frozen.
|
boolean |
isConfigurationFrozen()
Return whether this factory's bean definitions are frozen,
i.e. are not supposed to be modified or post-processed any further.
|
protected boolean |
isPrimary(String beanName,
Object beanInstance)
Return whether the bean definition for the given bean name has been
marked as a primary bean.
|
protected boolean |
matchesBeanName(String beanName,
String candidateName)
Determine whether the given candidate name matches the bean name or the aliases
stored in this bean definition.
|
void |
preInstantiateSingletons()
Ensure that all non-lazy-init singletons are instantiated, also considering
FactoryBeans. |
void |
registerBeanDefinition(String beanName,
BeanDefinition beanDefinition)
Register a new bean definition with this registry.
|
void |
registerResolvableDependency(Class<?> dependencyType,
Object autowiredValue)
Register a special dependency type with corresponding autowired value.
|
void |
registerSingleton(String beanName,
Object singletonObject)
Register the given existing object as singleton in the bean registry,
under the given bean name.
|
void |
removeBeanDefinition(String beanName)
Remove the BeanDefinition for the given name.
|
protected void |
resetBeanDefinition(String beanName)
Reset all bean definition caches for the given bean,
including the caches of beans that are derived from it.
|
Object |
resolveDependency(DependencyDescriptor descriptor,
String requestingBeanName,
Set<String> autowiredBeanNames,
TypeConverter typeConverter)
Resolve the specified dependency against the beans defined in this factory.
|
<T> NamedBeanHolder<T> |
resolveNamedBean(Class<T> requiredType)
Resolve the bean instance that uniquely matches the given object type, if any,
including its bean name.
|
void |
setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding)
Set whether it should be allowed to override bean definitions by registering
a different definition with the same name, automatically replacing the former.
|
void |
setAllowEagerClassLoading(boolean allowEagerClassLoading)
Set whether the factory is allowed to eagerly load bean classes
even for bean definitions that are marked as "lazy-init".
|
void |
setAutowireCandidateResolver(AutowireCandidateResolver autowireCandidateResolver)
Set a custom autowire candidate resolver for this BeanFactory to use
when deciding whether a bean definition should be considered as a
candidate for autowiring.
|
void |
setDependencyComparator(Comparator<Object> dependencyComparator)
Set a
Comparator for dependency Lists and arrays. |
void |
setSerializationId(String serializationId)
Specify an id for serialization purposes, allowing this BeanFactory to be
deserialized from this id back into the BeanFactory object, if needed.
|
String |
toString() |
protected Object |
writeReplace() |
applyBeanPostProcessorsAfterInitialization, applyBeanPostProcessorsBeforeInitialization, applyBeanPostProcessorsBeforeInstantiation, applyBeanPropertyValues, applyMergedBeanDefinitionPostProcessors, applyPropertyValues, autowire, autowireBean, autowireBeanProperties, autowireByName, autowireByType, autowireConstructor, checkDependencies, clearSingletonCache, configureBean, createBean, createBean, createBean, createBeanInstance, destroyBean, determineConstructorsFromBeanPostProcessors, determineTargetType, doCreateBean, filterPropertyDescriptorsForDependencyCheck, filterPropertyDescriptorsForDependencyCheck, getEarlyBeanReference, getInstantiationStrategy, getObjectForBeanInstance, getParameterNameDiscoverer, getTypeForFactoryBean, getTypeForFactoryMethod, ignoreDependencyInterface, ignoreDependencyType, initializeBean, initializeBean, instantiateBean, instantiateUsingFactoryMethod, invokeCustomInitMethod, invokeInitMethods, isExcludedFromDependencyCheck, obtainFromSupplier, populateBean, postProcessObjectFromFactoryBean, predictBeanType, removeSingleton, resolveBeforeInstantiation, resolveDependency, setAllowCircularReferences, setAllowRawInjectionDespiteWrapping, setInstantiationStrategy, setParameterNameDiscoverer, unsatisfiedNonSimplePropertiesaddBeanPostProcessor, addEmbeddedValueResolver, addPropertyEditorRegistrar, afterPrototypeCreation, beforePrototypeCreation, checkMergedBeanDefinition, cleanupAfterBeanCreationFailure, clearMergedBeanDefinition, containsBean, containsLocalBean, copyRegisteredEditorsTo, destroyBean, destroyBean, destroyScopedBean, doGetBean, evaluateBeanDefinitionString, getAccessControlContext, getAliases, getBean, getBean, getBean, getBean, getBeanClassLoader, getBeanExpressionResolver, getBeanPostProcessorCount, getBeanPostProcessors, getConversionService, getCustomEditors, getCustomTypeConverter, getMergedBeanDefinition, getMergedBeanDefinition, getMergedBeanDefinition, getMergedLocalBeanDefinition, getParentBeanFactory, getPropertyEditorRegistrars, getRegisteredScope, getRegisteredScopeNames, getTempClassLoader, getType, getTypeConverter, hasBeanCreationStarted, hasDestructionAwareBeanPostProcessors, hasEmbeddedValueResolver, hasInstantiationAwareBeanPostProcessors, initBeanWrapper, isActuallyInCreation, isBeanNameInUse, isCacheBeanMetadata, isFactoryBean, isFactoryBean, isPrototype, isPrototypeCurrentlyInCreation, isSingleton, isTypeMatch, isTypeMatch, markBeanAsCreated, originalBeanName, registerCustomEditor, registerCustomEditors, registerDisposableBeanIfNecessary, registerScope, removeSingletonIfCreatedForTypeCheckOnly, requiresDestruction, resolveBeanClass, resolveEmbeddedValue, setBeanClassLoader, setBeanExpressionResolver, setCacheBeanMetadata, setConversionService, setParentBeanFactory, setSecurityContextProvider, setTempClassLoader, setTypeConverter, transformedBeanNamegetCachedObjectForFactoryBean, getFactoryBean, getObjectFromFactoryBean, getTypeForFactoryBeanaddSingleton, addSingletonFactory, afterSingletonCreation, beforeSingletonCreation, containsSingleton, destroyBean, getDependenciesForBean, getDependentBeans, getSingleton, getSingleton, getSingleton, getSingletonCount, getSingletonMutex, getSingletonNames, hasDependentBean, isCurrentlyInCreation, isDependent, isSingletonCurrentlyInCreation, onSuppressedException, registerContainedBean, registerDependentBean, registerDisposableBean, setCurrentlyInCreationcanonicalName, checkForAliasCircle, getAliases, hasAlias, isAlias, registerAlias, removeAlias, resolveAliasesclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitignoreDependencyInterface, ignoreDependencyTypeapplyBeanPostProcessorsAfterInitialization, applyBeanPostProcessorsBeforeInitialization, applyBeanPropertyValues, autowire, autowireBean, autowireBeanProperties, configureBean, createBean, createBean, destroyBean, initializeBean, resolveDependencyaddBeanPostProcessor, addEmbeddedValueResolver, addPropertyEditorRegistrar, copyRegisteredEditorsTo, destroyBean, destroyScopedBean, getAccessControlContext, getBeanClassLoader, getBeanExpressionResolver, getBeanPostProcessorCount, getConversionService, getDependenciesForBean, getDependentBeans, getMergedBeanDefinition, getRegisteredScope, getRegisteredScopeNames, getTempClassLoader, getTypeConverter, hasEmbeddedValueResolver, isCacheBeanMetadata, isCurrentlyInCreation, isFactoryBean, registerAlias, registerCustomEditor, registerDependentBean, registerScope, resolveAliases, resolveEmbeddedValue, setBeanClassLoader, setBeanExpressionResolver, setCacheBeanMetadata, setConversionService, setCurrentlyInCreation, setParentBeanFactory, setTempClassLoader, setTypeConvertercontainsLocalBean, getParentBeanFactorycontainsBean, getAliases, getBean, getBean, getBean, getType, isPrototype, isSingleton, isTypeMatch, isTypeMatchcontainsSingleton, getSingleton, getSingletonCount, getSingletonMutex, getSingletonNamesisBeanNameInUsepublic DefaultListableBeanFactory()
public DefaultListableBeanFactory(@Nullable
BeanFactory parentBeanFactory)
parentBeanFactory - the parent BeanFactorypublic void setSerializationId(@Nullable
String serializationId)
@Nullable public String getSerializationId()
public void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding)
Default is "true".
public boolean isAllowBeanDefinitionOverriding()
public void setAllowEagerClassLoading(boolean allowEagerClassLoading)
Default is "true". Turn this flag off to suppress class loading for lazy-init beans unless such a bean is explicitly requested. In particular, by-type lookups will then simply ignore bean definitions without resolved class name, instead of loading the bean classes on demand just to perform a type check.
public boolean isAllowEagerClassLoading()
public void setDependencyComparator(@Nullable
Comparator<Object> dependencyComparator)
Comparator for dependency Lists and arrays.OrderComparator,
AnnotationAwareOrderComparator@Nullable public Comparator<Object> getDependencyComparator()
null.public void setAutowireCandidateResolver(AutowireCandidateResolver autowireCandidateResolver)
public AutowireCandidateResolver getAutowireCandidateResolver()
null).public void copyConfigurationFrom(ConfigurableBeanFactory otherFactory)
ConfigurableBeanFactoryShould include all standard configuration settings as well as BeanPostProcessors, Scopes, and factory-specific internal settings. Should not include any metadata of actual bean definitions, such as BeanDefinition objects and bean name aliases.
copyConfigurationFrom 在接口中 ConfigurableBeanFactorycopyConfigurationFrom 在类中 AbstractAutowireCapableBeanFactoryotherFactory - the other BeanFactory to copy frompublic <T> T getBean(Class<T> requiredType) throws BeansException
BeanFactorygetBean 在接口中 BeanFactoryrequiredType - class对象需要的类型NoSuchBeanDefinitionException - 没有对应class的bean定义NoUniqueBeanDefinitionException - 找到多个匹配的BeansException - 创建bean的实例ListableBeanFactorypublic <T> T getBean(Class<T> requiredType, @Nullable Object... args) throws BeansException
BeanFactorygetBean 在接口中 BeanFactoryrequiredType - bean的类型args - 构造函数的参数的类型,在实例化的过程中不需要去推断构造函数了NoSuchBeanDefinitionException - if there is no such bean definitionBeanDefinitionStoreException - if arguments have been given but
the affected bean isn't a prototypeBeansException - if the bean could not be createdpublic boolean containsBeanDefinition(String beanName)
AbstractBeanFactorycontainsBean when no cached singleton instance is found.
Depending on the nature of the concrete bean factory implementation, this operation might be expensive (for example, because of directory lookups in external registries). However, for listable bean factories, this usually just amounts to a local hash lookup: The operation is therefore part of the public interface there. The same implementation can serve for both this template method and the public interface method in that case.
containsBeanDefinition 在接口中 ListableBeanFactorycontainsBeanDefinition 在接口中 BeanDefinitionRegistrycontainsBeanDefinition 在类中 AbstractBeanFactorybeanName - the name of the bean to look forAbstractBeanFactory.containsBean(java.lang.String),
ListableBeanFactory.containsBeanDefinition(java.lang.String)public int getBeanDefinitionCount()
ListableBeanFactorygetBeanDefinitionCount 在接口中 ListableBeanFactorygetBeanDefinitionCount 在接口中 BeanDefinitionRegistrypublic String[] getBeanDefinitionNames()
ListableBeanFactorygetBeanDefinitionNames 在接口中 ListableBeanFactorygetBeanDefinitionNames 在接口中 BeanDefinitionRegistrypublic String[] getBeanNamesForType(org.springframework.core.ResolvableType type)
ListableBeanFactorygetBeanNamesForType 在接口中 ListableBeanFactorypublic String[] getBeanNamesForType(@Nullable Class<?> type)
ListableBeanFactorygetBeanNamesForType 在接口中 ListableBeanFactorypublic String[] getBeanNamesForType(@Nullable Class<?> type, boolean includeNonSingletons, boolean allowEagerInit)
ListableBeanFactorygetBeanNamesForType 在接口中 ListableBeanFactorypublic <T> Map<String,T> getBeansOfType(@Nullable Class<T> type) throws BeansException
ListableBeanFactorygetBeansOfType 在接口中 ListableBeanFactoryBeansExceptionpublic <T> Map<String,T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException
ListableBeanFactorygetBeansOfType 在接口中 ListableBeanFactoryBeansExceptionpublic String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType)
ListableBeanFactorygetBeanNamesForAnnotation 在接口中 ListableBeanFactorypublic Map<String,Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType)
ListableBeanFactorygetBeansWithAnnotation 在接口中 ListableBeanFactory@Nullable public <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) throws NoSuchBeanDefinitionException
ListableBeanFactorypublic void registerResolvableDependency(Class<?> dependencyType, @Nullable Object autowiredValue)
ConfigurableListableBeanFactoryThis is intended for factory/context references that are supposed to be autowirable but are not defined as beans in the factory: e.g. a dependency of type ApplicationContext resolved to the ApplicationContext instance that the bean is living in.
Note: There are no such default types registered in a plain BeanFactory, not even for the BeanFactory interface itself.
registerResolvableDependency 在接口中 ConfigurableListableBeanFactorydependencyType - the dependency type to register. This will typically
be a base interface such as BeanFactory, with extensions of it resolved
as well if declared as an autowiring dependency (e.g. ListableBeanFactory),
as long as the given value actually implements the extended interface.autowiredValue - the corresponding autowired value. This may also be an
implementation of the ObjectFactory
interface, which allows for lazy resolution of the actual target value.public boolean isAutowireCandidate(String beanName, DependencyDescriptor descriptor) throws NoSuchBeanDefinitionException
ConfigurableListableBeanFactoryThis method checks ancestor factories as well.
isAutowireCandidate 在接口中 ConfigurableListableBeanFactorybeanName - the name of the bean to checkdescriptor - the descriptor of the dependency to resolveNoSuchBeanDefinitionException - if there is no bean with the given nameprotected boolean isAutowireCandidate(String beanName, DependencyDescriptor descriptor, AutowireCandidateResolver resolver) throws NoSuchBeanDefinitionException
beanName - the name of the bean definition to checkdescriptor - the descriptor of the dependency to resolveresolver - the AutowireCandidateResolver to use for the actual resolution algorithmNoSuchBeanDefinitionExceptionprotected boolean isAutowireCandidate(String beanName, RootBeanDefinition mbd, DependencyDescriptor descriptor, AutowireCandidateResolver resolver)
beanName - the name of the bean definition to checkmbd - the merged bean definition to checkdescriptor - the descriptor of the dependency to resolveresolver - the AutowireCandidateResolver to use for the actual resolution algorithmpublic BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException
getBeanDefinition 在接口中 ConfigurableListableBeanFactorygetBeanDefinition 在接口中 BeanDefinitionRegistrygetBeanDefinition 在类中 AbstractBeanFactorybeanName - bean的名称NoSuchBeanDefinitionExceptionRootBeanDefinition,
ChildBeanDefinition,
ConfigurableListableBeanFactory.getBeanDefinition(java.lang.String)public Iterator<String> getBeanNamesIterator()
ConfigurableListableBeanFactoryIncludes bean definition names as well as names of manually registered singleton instances, with bean definition names consistently coming first, analogous to how type/annotation specific retrieval of bean names works.
getBeanNamesIterator 在接口中 ConfigurableListableBeanFactoryListableBeanFactory.containsBeanDefinition(java.lang.String),
SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object),
ListableBeanFactory.getBeanNamesForType(org.springframework.core.ResolvableType),
ListableBeanFactory.getBeanNamesForAnnotation(java.lang.Class<? extends java.lang.annotation.Annotation>)public void clearMetadataCache()
AbstractBeanFactoryTypically triggered after changes to the original bean definitions,
e.g. after applying a BeanFactoryPostProcessor. Note that metadata
for beans which have already been created at this point will be kept around.
public void freezeConfiguration()
ConfigurableListableBeanFactoryThis allows the factory to aggressively cache bean definition metadata.
public boolean isConfigurationFrozen()
ConfigurableListableBeanFactoryisConfigurationFrozen 在接口中 ConfigurableListableBeanFactorytrue if the factory's configuration is considered frozenprotected boolean isBeanEligibleForMetadataCaching(String beanName)
isBeanEligibleForMetadataCaching 在类中 AbstractBeanFactorybeanName - the name of the beantrue if the bean's metadata may be cached
at this point alreadyfreezeConfiguration()public void preInstantiateSingletons()
throws BeansException
ConfigurableListableBeanFactoryFactoryBeans.
Typically invoked at the end of factory setup, if desired.preInstantiateSingletons 在接口中 ConfigurableListableBeanFactoryBeansException - if one of the singleton beans could not be created.
Note: This may have left the factory with some beans already initialized!
Call ConfigurableBeanFactory.destroySingletons() for full cleanup in this case.ConfigurableBeanFactory.destroySingletons()public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException
BeanDefinitionRegistryregisterBeanDefinition 在接口中 BeanDefinitionRegistrybeanName - the name of the bean instance to registerbeanDefinition - definition of the bean instance to registerBeanDefinitionStoreException - if the BeanDefinition is invalid
or if there is already a BeanDefinition for the specified bean name
(and we are not allowed to override it)GenericBeanDefinition,
RootBeanDefinition,
ChildBeanDefinitionpublic void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException
BeanDefinitionRegistryremoveBeanDefinition 在接口中 BeanDefinitionRegistrybeanName - the name of the bean instance to registerNoSuchBeanDefinitionException - if there is no such bean definitionprotected void resetBeanDefinition(String beanName)
beanName - the name of the bean to resetprotected boolean allowAliasOverriding()
allowAliasOverriding 在类中 org.springframework.core.SimpleAliasRegistrypublic void registerSingleton(String beanName, Object singletonObject) throws IllegalStateException
SingletonBeanRegistryThe given instance is supposed to be fully initialized; the registry
will not perform any initialization callbacks (in particular, it won't
call InitializingBean's afterPropertiesSet method).
The given instance will not receive any destruction callbacks
(like DisposableBean's destroy method) either.
When running within a full BeanFactory: Register a bean definition instead of an existing instance if your bean is supposed to receive initialization and/or destruction callbacks.
Typically invoked during registry configuration, but can also be used for runtime registration of singletons. As a consequence, a registry implementation should synchronize singleton access; it will have to do this anyway if it supports a BeanFactory's lazy initialization of singletons.
registerSingleton 在接口中 SingletonBeanRegistryregisterSingleton 在类中 DefaultSingletonBeanRegistrybeanName - the name of the beansingletonObject - the existing singleton objectIllegalStateExceptionInitializingBean.afterPropertiesSet(),
DisposableBean.destroy(),
BeanDefinitionRegistry.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)public void destroySingleton(String beanName)
DefaultSingletonBeanRegistrydestroySingleton 在类中 DefaultSingletonBeanRegistrybeanName - bean的名称DefaultSingletonBeanRegistry.destroyBean(java.lang.String, org.springframework.beans.factory.DisposableBean)public void destroySingletons()
ConfigurableBeanFactoryAny exception that arises during destruction should be caught and logged instead of propagated to the caller of this method.
public <T> NamedBeanHolder<T> resolveNamedBean(Class<T> requiredType) throws BeansException
AutowireCapableBeanFactoryThis is effectively a variant of BeanFactory.getBean(Class) which preserves the
bean name of the matching instance.
resolveNamedBean 在接口中 AutowireCapableBeanFactoryrequiredType - type the bean must match; can be an interface or superclassNoSuchBeanDefinitionException - if no matching bean was foundNoUniqueBeanDefinitionException - if more than one matching bean was foundBeansException - if the bean could not be createdBeanFactory.getBean(Class)@Nullable public Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName, @Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException
AutowireCapableBeanFactoryresolveDependency 在接口中 AutowireCapableBeanFactorydescriptor - the descriptor for the dependency (field/method/constructor)requestingBeanName - the name of the bean which declares the given dependencyautowiredBeanNames - a Set that all names of autowired beans (used for
resolving the given dependency) are supposed to be added totypeConverter - the TypeConverter to use for populating arrays and collectionsnull if none foundNoSuchBeanDefinitionException - if no matching bean was foundNoUniqueBeanDefinitionException - if more than one matching bean was foundBeansException - if dependency resolution failed for any other reasonDependencyDescriptor@Nullable public Object doResolveDependency(DependencyDescriptor descriptor, @Nullable String beanName, @Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException
BeansExceptionprotected Map<String,Object> findAutowireCandidates(@Nullable String beanName, Class<?> requiredType, DependencyDescriptor descriptor)
beanName - the name of the bean that is about to be wiredrequiredType - the actual type of bean to look for
(may be an array component type or collection element type)descriptor - the descriptor of the dependency to resolvenull)BeansException - in case of errorsAbstractAutowireCapableBeanFactory.autowireByType(java.lang.String, org.springframework.beans.factory.support.AbstractBeanDefinition, org.springframework.beans.BeanWrapper, org.springframework.beans.MutablePropertyValues),
AbstractAutowireCapableBeanFactory.autowireConstructor(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.reflect.Constructor<?>[], java.lang.Object[])@Nullable protected String determineAutowireCandidate(Map<String,Object> candidates, DependencyDescriptor descriptor)
Looks for @Primary and @Priority (in that order).
candidates - a Map of candidate names and candidate instances
that match the required type, as returned by findAutowireCandidates(java.lang.String, java.lang.Class<?>, org.springframework.beans.factory.config.DependencyDescriptor)descriptor - the target dependency to match againstnull if none found@Nullable protected String determinePrimaryCandidate(Map<String,Object> candidates, Class<?> requiredType)
candidates - a Map of candidate names and candidate instances
(or candidate classes if not created yet) that match the required typerequiredType - the target dependency type to match againstnull if none foundisPrimary(String, Object)@Nullable protected String determineHighestPriorityCandidate(Map<String,Object> candidates, Class<?> requiredType)
Based on @javax.annotation.Priority. As defined by the related
Ordered interface, the lowest value has
the highest priority.
candidates - a Map of candidate names and candidate instances
(or candidate classes if not created yet) that match the required typerequiredType - the target dependency type to match againstnull if none foundgetPriority(Object)protected boolean isPrimary(String beanName, Object beanInstance)
beanName - the name of the beanbeanInstance - the corresponding bean instance (can be null)@Nullable protected Integer getPriority(Object beanInstance)
javax.annotation.Priority annotation.
The default implementation delegates to the specified
dependency comparator, checking its
method if it is an extension of
Spring's common OrderComparator - typically, an
AnnotationAwareOrderComparator.
If no such comparator is present, this implementation returns null.
beanInstance - the bean instance to check (can be null)null if none is setprotected boolean matchesBeanName(String beanName, @Nullable String candidateName)
protected Object writeReplace() throws ObjectStreamException