The Spring Framework

org.springframework.beans.factory.support
Class AbstractAutowireCapableBeanFactory

java.lang.Object
  extended by org.springframework.core.SimpleAliasRegistry
      extended by org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
          extended by org.springframework.beans.factory.support.FactoryBeanRegistrySupport
              extended by org.springframework.beans.factory.support.AbstractBeanFactory
                  extended by org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
All Implemented Interfaces:
BeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory, SingletonBeanRegistry, HierarchicalBeanFactory, AliasRegistry
Direct Known Subclasses:
DefaultListableBeanFactory

public abstract class AbstractAutowireCapableBeanFactory
extends AbstractBeanFactory
implements AutowireCapableBeanFactory

Abstract bean factory superclass that implements default bean creation, with the full capabilities specified by the RootBeanDefinition class. Implements the AutowireCapableBeanFactory interface in addition to AbstractBeanFactory's createBean(java.lang.Class) method.

Provides bean creation (with constructor resolution), property population, wiring (including autowiring), and initialization. Handles runtime bean references, resolves managed collections, calls initialization methods, etc. Supports autowiring constructors, properties by name, and properties by type.

The main template method to be implemented by subclasses is AutowireCapableBeanFactory.resolveDependency(DependencyDescriptor, String, Set, TypeConverter), used for autowiring by type. In case of a factory which is capable of searching its bean definitions, matching beans will typically be implemented through such a search. For other factory styles, simplified matching algorithms can be implemented.

Note that this class does not assume or implement bean definition registry capabilities. See DefaultListableBeanFactory for an implementation of the ListableBeanFactory and BeanDefinitionRegistry interfaces, which represent the API and SPI view of such a factory, respectively.

Since:
13.02.2004
Author:
Rod Johnson, Juergen Hoeller, Rob Harrop, Mark Fisher
See Also:
RootBeanDefinition, DefaultListableBeanFactory, BeanDefinitionRegistry

Field Summary
 
Fields inherited from class org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
logger, NULL_OBJECT
 
Fields inherited from interface org.springframework.beans.factory.config.AutowireCapableBeanFactory
AUTOWIRE_AUTODETECT, AUTOWIRE_BY_NAME, AUTOWIRE_BY_TYPE, AUTOWIRE_CONSTRUCTOR, AUTOWIRE_NO
 
Fields inherited from interface org.springframework.beans.factory.BeanFactory
FACTORY_BEAN_PREFIX
 
Fields inherited from interface org.springframework.beans.factory.config.ConfigurableBeanFactory
SCOPE_PROTOTYPE, SCOPE_SINGLETON
 
Constructor Summary
AbstractAutowireCapableBeanFactory()
          Create a new AbstractAutowireCapableBeanFactory.
AbstractAutowireCapableBeanFactory(BeanFactory parentBeanFactory)
          Create a new AbstractAutowireCapableBeanFactory with the given parent.
 
Method Summary
 Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
          Apply BeanPostProcessors to the given existing bean instance, invoking their postProcessAfterInitialization methods.
 Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)
          Apply BeanPostProcessors to the given existing bean instance, invoking their postProcessBeforeInitialization methods.
protected  Object applyBeanPostProcessorsBeforeInstantiation(Class beanClass, String beanName)
          Apply InstantiationAwareBeanPostProcessors to the specified bean definition (by class and name), invoking their postProcessBeforeInstantiation methods.
 void applyBeanPropertyValues(Object existingBean, String beanName)
          Apply the property values of the bean definition with the given name to the given bean instance.
protected  void applyMergedBeanDefinitionPostProcessors(RootBeanDefinition mbd, Class beanType, String beanName)
          Apply MergedBeanDefinitionPostProcessors to the specified bean definition, invoking their postProcessMergedBeanDefinition methods.
protected  void applyPropertyValues(String beanName, BeanDefinition mbd, BeanWrapper bw, PropertyValues pvs)
          Apply the given property values, resolving any runtime references to other beans in this bean factory.
 Object autowire(Class beanClass, int autowireMode, boolean dependencyCheck)
          Instantiate a new bean instance of the given class with the specified autowire strategy.
 void autowireBean(Object existingBean)
          Populate the given bean instance through applying after-instantiation callbacks and bean property post-processing (e.g. for annotation-driven injection).
 void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck)
          Autowire the bean properties of the given bean instance by name or type.
protected  void autowireByName(String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs)
          Fill in any missing property values with references to other beans in this factory if autowire is set to "byName".
protected  void autowireByType(String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs)
          Abstract method defining "autowire by type" (bean properties by type) behavior.
protected  BeanWrapper autowireConstructor(String beanName, RootBeanDefinition mbd, Constructor[] ctors, Object[] explicitArgs)
          "autowire constructor" (with constructor arguments by type) behavior.
protected  void checkDependencies(String beanName, AbstractBeanDefinition mbd, PropertyDescriptor[] pds, PropertyValues pvs)
          Perform a dependency check that all properties exposed have been set, if desired.
 Object configureBean(Object existingBean, String beanName)
          Configure the given raw bean: autowiring bean properties, applying bean property values, applying factory callbacks such as setBeanName and setBeanFactory, and also applying all bean post processors (including ones which might wrap the given raw bean).
 void copyConfigurationFrom(ConfigurableBeanFactory otherFactory)
          Copy all relevant configuration from the given other factory.
 Object createBean(Class beanClass)
          Fully create a new bean instance of the given class.
 Object createBean(Class beanClass, int autowireMode, boolean dependencyCheck)
          Fully create a new bean instance of the given class with the specified autowire strategy.
protected  Object createBean(String beanName, RootBeanDefinition mbd, Object[] args)
          Central method of this class: creates a bean instance, populates the bean instance, applies post-processors, etc.
protected  BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args)
          Create a new instance for the specified bean, using an appropriate instantiation strategy: factory method, constructor autowiring, or simple instantiation.
protected  Constructor[] determineConstructorsFromBeanPostProcessors(Class beanClass, String beanName)
          Determine candidate constructors to use for the given bean, checking all registered SmartInstantiationAwareBeanPostProcessors.
protected  Object doCreateBean(String beanName, RootBeanDefinition mbd, Object[] args)
          Actually create the specified bean.
protected  PropertyDescriptor[] filterPropertyDescriptorsForDependencyCheck(BeanWrapper bw)
          Extract a filtered set of PropertyDescriptors from the given BeanWrapper, excluding ignored dependency types or properties defined on ignored dependency interfaces.
protected  Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean)
          Obtain a reference for early access to the specified bean, typically for the purpose of resolving a circular reference.
protected  InstantiationStrategy getInstantiationStrategy()
          Return the instantiation strategy to use for creating bean instances.
protected  Class getTypeForFactoryBean(String beanName, RootBeanDefinition mbd)
          This implementation checks the FactoryBean's getObjectType method on a plain instance of the FactoryBean, without bean properties applied yet.
protected  Class getTypeForFactoryMethod(String beanName, RootBeanDefinition mbd, Class[] typesToMatch)
          Determine the bean type for the given bean definition which is based on a factory method.
 void ignoreDependencyInterface(Class ifc)
          Ignore the given dependency interface for autowiring.
 void ignoreDependencyType(Class type)
          Ignore the given dependency type for autowiring: for example, String.
 Object initializeBean(Object existingBean, String beanName)
          Initialize the given raw bean, applying factory callbacks such as setBeanName and setBeanFactory, also applying all bean post processors (including ones which might wrap the given raw bean).
protected  Object initializeBean(String beanName, Object bean, RootBeanDefinition mbd)
          Initialize the given bean instance, applying factory callbacks as well as init methods and bean post processors.
protected  BeanWrapper instantiateBean(String beanName, RootBeanDefinition mbd)
          Instantiate the given bean using its default constructor.
protected  BeanWrapper instantiateUsingFactoryMethod(String beanName, RootBeanDefinition mbd, Object[] explicitArgs)
          Instantiate the bean using a named factory method.
protected  void invokeCustomInitMethod(String beanName, Object bean, String initMethodName, boolean enforceInitMethod)
          Invoke the specified custom init method on the given bean.
protected  void invokeInitMethods(String beanName, Object bean, RootBeanDefinition mbd)
          Give a bean a chance to react now all its properties are set, and a chance to know about its owning bean factory (this object).
protected  boolean isExcludedFromDependencyCheck(PropertyDescriptor pd)
          Determine whether the given bean property is excluded from dependency checks.
protected  void populateBean(String beanName, AbstractBeanDefinition mbd, BeanWrapper bw)
          Populate the bean instance in the given BeanWrapper with the property values from the bean definition.
protected  Object postProcessObjectFromFactoryBean(Object object, String beanName)
          Applies the postProcessAfterInitialization callback of all registered BeanPostProcessors, giving them a chance to post-process the object obtained from FactoryBeans (for example, to auto-proxy them).
protected  Class predictBeanType(String beanName, RootBeanDefinition mbd, Class[] typesToMatch)
          Predict the eventual bean type (of the processed bean instance) for the specified bean.
protected  void removeSingleton(String beanName)
          Overridden to clear FactoryBean instance cache as well.
protected  Object resolveBeforeInstantiation(String beanName, RootBeanDefinition mbd)
          Apply before-instantiation post-processors, resolving whether there is a before-instantiation shortcut for the specified bean.
 Object resolveDependency(DependencyDescriptor descriptor, String beanName)
          Resolve the specified dependency against the beans defined in this factory.
 void setAllowCircularReferences(boolean allowCircularReferences)
          Set whether to allow circular references between beans - and automatically try to resolve them.
 void setAllowRawInjectionDespiteWrapping(boolean allowRawInjectionDespiteWrapping)
          Set whether to allow the raw injection of a bean instance into some other bean's property, despite the injected bean eventually getting wrapped (for example, through AOP auto-proxying).
 void setInstantiationStrategy(InstantiationStrategy instantiationStrategy)
          Set the instantiation strategy to use for creating bean instances.
protected  String[] unsatisfiedNonSimpleProperties(AbstractBeanDefinition mbd, BeanWrapper bw)
          Return an array of non-simple bean properties that are unsatisfied.
 
Methods inherited from class org.springframework.beans.factory.support.AbstractBeanFactory
addBeanPostProcessor, addPropertyEditorRegistrar, afterPrototypeCreation, beforePrototypeCreation, checkMergedBeanDefinition, clearMergedBeanDefinition, containsBean, containsBeanDefinition, containsLocalBean, destroyBean, destroyBean, destroyScopedBean, doGetBean, getAliases, getBean, getBean, getBean, getBean, getBeanClassLoader, getBeanDefinition, getBeanPostProcessorCount, getBeanPostProcessors, getCustomEditors, getCustomTypeConverter, getMergedBeanDefinition, getMergedBeanDefinition, getMergedBeanDefinition, getMergedLocalBeanDefinition, getObjectForBeanInstance, getParentBeanFactory, getPropertyEditorRegistrars, getRegisteredScope, getRegisteredScopeNames, getTempClassLoader, getType, getTypeConverter, hasDestructionAwareBeanPostProcessors, hasInstantiationAwareBeanPostProcessors, initBeanWrapper, isBeanEligibleForMetadataCaching, isBeanNameInUse, isCacheBeanMetadata, isCurrentlyInCreation, isFactoryBean, isFactoryBean, isPrototype, isPrototypeCurrentlyInCreation, isSingleton, isTypeMatch, markBeanAsCreated, originalBeanName, registerCustomEditor, registerCustomEditor, registerCustomEditors, registerDisposableBeanIfNecessary, registerScope, removeSingletonIfCreatedForTypeCheckOnly, requiresDestruction, resolveBeanClass, resolveBeanClass, setBeanClassLoader, setCacheBeanMetadata, setParentBeanFactory, setTempClassLoader, setTypeConverter, transformedBeanName
 
Methods inherited from class org.springframework.beans.factory.support.FactoryBeanRegistrySupport
getCachedObjectForFactoryBean, getFactoryBean, getObjectFromFactoryBean, getTypeForFactoryBean
 
Methods inherited from class org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
addSingleton, addSingletonFactory, afterSingletonCreation, beforeSingletonCreation, containsSingleton, destroyBean, destroySingleton, destroySingletons, getDependenciesForBean, getDependentBeans, getSingleton, getSingleton, getSingleton, getSingletonCount, getSingletonMutex, getSingletonNames, hasDependentBean, isSingletonCurrentlyInCreation, onSuppressedException, registerDependentBean, registerDisposableBean, registerSingleton
 
Methods inherited from class org.springframework.core.SimpleAliasRegistry
allowAliasOverriding, canonicalName, isAlias, registerAlias, removeAlias, resolveAliases
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.springframework.beans.factory.config.AutowireCapableBeanFactory
resolveDependency
 
Methods inherited from interface org.springframework.beans.factory.BeanFactory
containsBean, getAliases, getBean, getBean, getBean, getType, isPrototype, isSingleton, isTypeMatch
 
Methods inherited from interface org.springframework.beans.factory.config.ConfigurableBeanFactory
destroySingletons, getDependenciesForBean, getDependentBeans, registerAlias, registerDependentBean, resolveAliases
 
Methods inherited from interface org.springframework.beans.factory.config.SingletonBeanRegistry
containsSingleton, getSingleton, getSingletonCount, getSingletonNames, registerSingleton
 

Constructor Detail

AbstractAutowireCapableBeanFactory

public AbstractAutowireCapableBeanFactory()
Create a new AbstractAutowireCapableBeanFactory.


AbstractAutowireCapableBeanFactory

public AbstractAutowireCapableBeanFactory(BeanFactory parentBeanFactory)
Create a new AbstractAutowireCapableBeanFactory with the given parent.

Parameters:
parentBeanFactory - parent bean factory, or null if none
Method Detail

setInstantiationStrategy

public void setInstantiationStrategy(InstantiationStrategy instantiationStrategy)
Set the instantiation strategy to use for creating bean instances. Default is CglibSubclassingInstantiationStrategy.

See Also:
CglibSubclassingInstantiationStrategy

getInstantiationStrategy

protected InstantiationStrategy getInstantiationStrategy()
Return the instantiation strategy to use for creating bean instances.


setAllowCircularReferences

public void setAllowCircularReferences(boolean allowCircularReferences)
Set whether to allow circular references between beans - and automatically try to resolve them.

Note that circular reference resolution means that one of the involved beans will receive a reference to another bean that is not fully initialized yet. This can lead to subtle and not-so-subtle side effects on initialization; it does work fine for many scenarios, though.

Default is "true". Turn this off to throw an exception when encountering a circular reference, disallowing them completely.

NOTE: It is generally recommended to not rely on circular references between your beans. Refactor your application logic to have the two beans involved delegate to a third bean that encapsulates their common logic.


setAllowRawInjectionDespiteWrapping

public void setAllowRawInjectionDespiteWrapping(boolean allowRawInjectionDespiteWrapping)
Set whether to allow the raw injection of a bean instance into some other bean's property, despite the injected bean eventually getting wrapped (for example, through AOP auto-proxying).

This will only be used as a last resort in case of a circular reference that cannot be resolved otherwise: essentially, preferring a raw instance getting injected over a failure of the entire bean wiring process.

Default is "false", as of Spring 2.0. Turn this on to allow for non-wrapped raw beans injected into some of your references, which was Spring 1.2's (arguably unclean) default behavior.

NOTE: It is generally recommended to not rely on circular references between your beans, in particular with auto-proxying involved.

See Also:
setAllowCircularReferences(boolean)

ignoreDependencyType

public void ignoreDependencyType(Class type)
Ignore the given dependency type for autowiring: for example, String. Default is none.


ignoreDependencyInterface

public void ignoreDependencyInterface(Class ifc)
Ignore the given dependency interface for autowiring.

This will typically be used by application contexts to register dependencies that are resolved in other ways, like BeanFactory through BeanFactoryAware or ApplicationContext through ApplicationContextAware.

By default, only the BeanFactoryAware interface is ignored. For further types to ignore, invoke this method for each type.

See Also:
BeanFactoryAware, ApplicationContextAware

copyConfigurationFrom

public void copyConfigurationFrom(ConfigurableBeanFactory otherFactory)
Description copied from interface: ConfigurableBeanFactory
Copy all relevant configuration from the given other factory.

Should 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.

Specified by:
copyConfigurationFrom in interface ConfigurableBeanFactory
Overrides:
copyConfigurationFrom in class AbstractBeanFactory
Parameters:
otherFactory - the other BeanFactory to copy from

createBean

public Object createBean(Class beanClass)
                  throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Fully create a new bean instance of the given class.

Performs full initialization of the bean, including all applicable BeanPostProcessors.

Note: This is intended for creating a fresh instance, populating annotated fields and methods as well as applying all standard bean initialiation callbacks. It does not imply traditional by-name or by-type autowiring of properties; use AutowireCapableBeanFactory.createBean(Class, int, boolean) for that purposes.

Specified by:
createBean in interface AutowireCapableBeanFactory
Parameters:
beanClass - the class of the bean to create
Returns:
the new bean instance
Throws:
BeansException - if instantiation or wiring failed

autowireBean

public void autowireBean(Object existingBean)
Description copied from interface: AutowireCapableBeanFactory
Populate the given bean instance through applying after-instantiation callbacks and bean property post-processing (e.g. for annotation-driven injection).

Note: This is essentially intended for (re-)populating annotated fields and methods, either for new instances or for deserialized instances. It does not imply traditional by-name or by-type autowiring of properties; use AutowireCapableBeanFactory.autowireBeanProperties(java.lang.Object, int, boolean) for that purposes.

Specified by:
autowireBean in interface AutowireCapableBeanFactory
Parameters:
existingBean - the existing bean instance

configureBean

public Object configureBean(Object existingBean,
                            String beanName)
                     throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Configure the given raw bean: autowiring bean properties, applying bean property values, applying factory callbacks such as setBeanName and setBeanFactory, and also applying all bean post processors (including ones which might wrap the given raw bean).

This is effectively a superset of what AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String) provides, fully applying the configuration specified by the corresponding bean definition. Note: This method requires a bean definition for the given name!

Specified by:
configureBean in interface AutowireCapableBeanFactory
Parameters:
existingBean - the existing bean instance
beanName - the name of the bean, to be passed to it if necessary (a bean definition of that name has to be available)
Returns:
the bean instance to use, either the original or a wrapped one
Throws:
NoSuchBeanDefinitionException - if there is no bean definition with the given name
BeansException - if the initialization failed
See Also:
AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String)

resolveDependency

public Object resolveDependency(DependencyDescriptor descriptor,
                                String beanName)
                         throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Resolve the specified dependency against the beans defined in this factory.

Specified by:
resolveDependency in interface AutowireCapableBeanFactory
Parameters:
descriptor - the descriptor for the dependency
beanName - the name of the bean which declares the present dependency
Returns:
the resolved object, or null if none found
Throws:
BeansException - in dependency resolution failed

createBean

public Object createBean(Class beanClass,
                         int autowireMode,
                         boolean dependencyCheck)
                  throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Fully create a new bean instance of the given class with the specified autowire strategy. All constants defined in this interface are supported here.

Performs full initialization of the bean, including all applicable BeanPostProcessors. This is effectively a superset of what AutowireCapableBeanFactory.autowire(java.lang.Class, int, boolean) provides, adding AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String) behavior.

Specified by:
createBean in interface AutowireCapableBeanFactory
Parameters:
beanClass - the class of the bean to create
autowireMode - by name or type, using the constants in this interface
dependencyCheck - whether to perform a dependency check for objects (not applicable to autowiring a constructor, thus ignored there)
Returns:
the new bean instance
Throws:
BeansException - if instantiation or wiring failed
See Also:
AutowireCapableBeanFactory.AUTOWIRE_NO, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT

autowire

public Object autowire(Class beanClass,
                       int autowireMode,
                       boolean dependencyCheck)
                throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Instantiate a new bean instance of the given class with the specified autowire strategy. All constants defined in this interface are supported here. Can also be invoked with AUTOWIRE_NO in order to just apply before-instantiation callbacks (e.g. for annotation-driven injection).

Does not apply standard BeanPostProcessors callbacks or perform any further initialization of the bean. This interface offers distinct, fine-grained operations for those purposes, for example AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String). However, InstantiationAwareBeanPostProcessor callbacks are applied, if applicable to the construction of the instance.

Specified by:
autowire in interface AutowireCapableBeanFactory
Parameters:
beanClass - the class of the bean to instantiate
autowireMode - by name or type, using the constants in this interface
dependencyCheck - whether to perform a dependency check for object references in the bean instance (not applicable to autowiring a constructor, thus ignored there)
Returns:
the new bean instance
Throws:
BeansException - if instantiation or wiring failed
See Also:
AutowireCapableBeanFactory.AUTOWIRE_NO, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String), AutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(java.lang.Object, java.lang.String), AutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(java.lang.Object, java.lang.String)

autowireBeanProperties

public void autowireBeanProperties(Object existingBean,
                                   int autowireMode,
                                   boolean dependencyCheck)
                            throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Autowire the bean properties of the given bean instance by name or type. Can also be invoked with AUTOWIRE_NO in order to just apply after-instantiation callbacks (e.g. for annotation-driven injection).

Does not apply standard BeanPostProcessors callbacks or perform any further initialization of the bean. This interface offers distinct, fine-grained operations for those purposes, for example AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String). However, InstantiationAwareBeanPostProcessor callbacks are applied, if applicable to the configuration of the instance.

Specified by:
autowireBeanProperties in interface AutowireCapableBeanFactory
Parameters:
existingBean - the existing bean instance
autowireMode - by name or type, using the constants in this interface
dependencyCheck - whether to perform a dependency check for object references in the bean instance
Throws:
BeansException - if wiring failed
See Also:
AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, AutowireCapableBeanFactory.AUTOWIRE_NO

applyBeanPropertyValues

public void applyBeanPropertyValues(Object existingBean,
                                    String beanName)
                             throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Apply the property values of the bean definition with the given name to the given bean instance. The bean definition can either define a fully self-contained bean, reusing its property values, or just property values meant to be used for existing bean instances.

This method does not autowire bean properties; it just applies explicitly defined property values. Use the AutowireCapableBeanFactory.autowireBeanProperties(java.lang.Object, int, boolean) method to autowire an existing bean instance. Note: This method requires a bean definition for the given name!

Does not apply standard BeanPostProcessors callbacks or perform any further initialization of the bean. This interface offers distinct, fine-grained operations for those purposes, for example AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String). However, InstantiationAwareBeanPostProcessor callbacks are applied, if applicable to the configuration of the instance.

Specified by:
applyBeanPropertyValues in interface AutowireCapableBeanFactory
Parameters:
existingBean - the existing bean instance
beanName - the name of the bean definition in the bean factory (a bean definition of that name has to be available)
Throws:
NoSuchBeanDefinitionException - if there is no bean definition with the given name
BeansException - if applying the property values failed
See Also:
AutowireCapableBeanFactory.autowireBeanProperties(java.lang.Object, int, boolean)

initializeBean

public Object initializeBean(Object existingBean,
                             String beanName)
Description copied from interface: AutowireCapableBeanFactory
Initialize the given raw bean, applying factory callbacks such as setBeanName and setBeanFactory, also applying all bean post processors (including ones which might wrap the given raw bean).

Note that no bean definition of the given name has to exist in the bean factory. The passed-in bean name will simply be used for callbacks but not checked against the registered bean definitions.

Specified by:
initializeBean in interface AutowireCapableBeanFactory
Parameters:
existingBean - the existing bean instance
beanName - the name of the bean, to be passed to it if necessary (only passed to BeanPostProcessors)
Returns:
the bean instance to use, either the original or a wrapped one

applyBeanPostProcessorsBeforeInitialization

public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean,
                                                          String beanName)
                                                   throws BeansException
Description copied from interface: AutowireCapableBeanFactory
Apply BeanPostProcessors to the given existing bean instance, invoking their postProcessBeforeInitialization methods. The returned bean instance may be a wrapper around the original.

Specified by:
applyBeanPostProcessorsBeforeInitialization in interface AutowireCapableBeanFactory
Parameters:
existingBean - the new bean instance
beanName - the name of the bean
Returns:
the bean instance to use, either the original or a wrapped one
Throws:
BeansException - if any post-processing failed
See Also:
BeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)

applyB