|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.beans.factory.support.AbstractBeanFactory org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
Abstract BeanFactory superclass that implements default bean creation, with the full capabilities specified by the RootBeanDefinition class. Implements the AutowireCapableBeanFactory interface. Like the base class AbstractBeanFactory, this superclass does not assume a listable bean factory.
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
findMatchingBeans
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 (or SPI) view on such a factory.
findMatchingBeans(java.lang.Class)
,
AbstractBeanFactory.createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
,
RootBeanDefinition
,
DefaultListableBeanFactory
,
ListableBeanFactory
,
BeanDefinitionRegistry
Field Summary |
Fields inherited from class org.springframework.beans.factory.support.AbstractBeanFactory |
logger |
Fields inherited from interface org.springframework.beans.factory.config.AutowireCapableBeanFactory |
AUTOWIRE_AUTODETECT, AUTOWIRE_BY_NAME, AUTOWIRE_BY_TYPE, AUTOWIRE_CONSTRUCTOR |
Fields inherited from interface org.springframework.beans.factory.BeanFactory |
FACTORY_BEAN_PREFIX |
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 |
applyBeanPostProcessorsAfterInitialization(Object bean,
String beanName,
RootBeanDefinition mergedBeanDefinition)
Apply BeanPostProcessors to the given bean instance, invoking their postProcessAfterInitialization methods. |
Object |
applyBeanPostProcessorsBeforeInitialization(Object existingBean,
String beanName)
Apply BeanPostProcessors to the given existing bean instance, invoking their postProcessBeforeInitialization methods.
|
Object |
applyBeanPostProcessorsBeforeInitialization(Object bean,
String beanName,
RootBeanDefinition mergedBeanDefinition)
Apply BeanPostProcessors to the given bean instance, invoking their postProcessBeforeInitialization methods. |
void |
applyBeanPropertyValues(Object existingBean,
String beanName)
Apply the property values of the bean definition with the given name to the given bean instance. |
Object |
autowire(Class beanClass,
int autowireMode,
boolean dependencyCheck)
Create a new bean instance of the given class with the specified autowire strategy. |
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,
RootBeanDefinition mergedBeanDefinition,
BeanWrapper bw,
MutablePropertyValues pvs)
Fills in any missing property values with references to other beans in this factory if autowire is set to "byName". |
protected void |
autowireByType(String beanName,
RootBeanDefinition mergedBeanDefinition,
BeanWrapper bw,
MutablePropertyValues pvs)
Abstract method defining "autowire by type" (bean properties by type) behavior. |
protected BeanWrapper |
autowireConstructor(String beanName,
RootBeanDefinition mergedBeanDefinition)
"autowire constructor" (with constructor arguments by type) behavior. |
protected Object |
createBean(String beanName,
RootBeanDefinition mergedBeanDefinition,
Object[] args)
Delegates to full createBean version with allowEagerCaching=true. |
protected Object |
createBean(String beanName,
RootBeanDefinition mergedBeanDefinition,
Object[] args,
boolean allowEagerCaching)
Create a bean instance for the given bean definition. |
protected void |
dependencyCheck(String beanName,
RootBeanDefinition mergedBeanDefinition,
BeanWrapper bw,
PropertyValues pvs)
Perform a dependency check that all properties exposed have been set, if desired. |
protected abstract Map |
findMatchingBeans(Class requiredType)
Find bean instances that match the required type. |
Set |
getIgnoredDependencyTypes()
Return the set of classes that will get ignored for autowiring. |
void |
ignoreDependencyType(Class type)
Ignore the given dependency type for autowiring. |
protected BeanWrapper |
instantiateUsingFactoryMethod(String beanName,
RootBeanDefinition mergedBeanDefinition,
Object[] args)
Instantiate the bean using a named factory method. |
protected void |
invokeCustomInitMethod(String beanName,
Object bean,
String initMethodName)
Invoke the specified custom init method on the given bean. |
protected void |
invokeInitMethods(String beanName,
Object bean,
RootBeanDefinition mergedBeanDefinition)
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 void |
populateBean(String beanName,
RootBeanDefinition mergedBeanDefinition,
BeanWrapper bw)
Populate the bean instance in the given BeanWrapper with the property values from the bean definition. |
protected Object |
resolveValueIfNecessary(String beanName,
RootBeanDefinition mergedBeanDefinition,
String argName,
Object value)
Given a PropertyValue, return a value, resolving any references to other beans in the factory if necessary. |
void |
setInstantiationStrategy(InstantiationStrategy instantiationStrategy)
Set the instantiation strategy to use for creating bean instances. |
protected String[] |
unsatisfiedObjectProperties(RootBeanDefinition mergedBeanDefinition,
BeanWrapper bw)
Return an array of object-type property names that are unsatisfied. |
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.BeanFactory |
containsBean, getAliases, getBean, getBean, getType, isSingleton |
Constructor Detail |
public AbstractAutowireCapableBeanFactory()
public AbstractAutowireCapableBeanFactory(BeanFactory parentBeanFactory)
parentBeanFactory
- parent bean factory, or null if noneMethod Detail |
public void setInstantiationStrategy(InstantiationStrategy instantiationStrategy)
CglibSubclassingInstantiationStrategy
public void ignoreDependencyType(Class type)
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, just the BeanFactory interface is ignored. For further types to ignore, invoke this method for each type.
BeanFactory
,
BeanFactoryAware
,
ApplicationContext
,
ApplicationContextAware
public Set getIgnoredDependencyTypes()
public Object autowire(Class beanClass, int autowireMode, boolean dependencyCheck) throws BeansException
AutowireCapableBeanFactory
autowire
in interface AutowireCapableBeanFactory
beanClass
- the class of the bean to instantiateautowireMode
- by name or type, using the constants in this interfacedependencyCheck
- whether to perform a dependency check for objects
(not applicable to autowiring a constructor, thus ignored there)
BeansException
- if instantiation or wiring failedAutowireCapableBeanFactory.AUTOWIRE_BY_NAME
,
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
,
AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR
,
AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT
public void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck) throws BeansException
AutowireCapableBeanFactory
autowireBeanProperties
in interface AutowireCapableBeanFactory
existingBean
- the existing bean instanceautowireMode
- by name or type, using the constants in this interfacedependencyCheck
- whether to perform a dependency check for object
BeansException
- if wiring failedAutowireCapableBeanFactory.AUTOWIRE_BY_NAME
,
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
public void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException
AutowireCapableBeanFactory
applyBeanPropertyValues
in interface AutowireCapableBeanFactory
existingBean
- the existing bean instancebeanName
- the name of the bean definition in the bean factory
BeansException
- if applying the property values failedpublic Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException
AutowireCapableBeanFactory
postProcessBeforeInitialization
methods.
The returned bean instance may be a wrapper around the original.
applyBeanPostProcessorsBeforeInitialization
in interface AutowireCapableBeanFactory
existingBean
- the new bean instancebeanName
- the name of the bean
BeansException
- if any post-processing failedBeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)
public Object applyBeanPostProcessorsBeforeInitialization(Object bean, String beanName, RootBeanDefinition mergedBeanDefinition) throws BeansException
bean
- the bean instancebeanName
- the name of the beanmergedBeanDefinition
- the corresponding bean definition,
for checking destroy methods (can be null)
BeansException
- if any post-processing failedBeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)
public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException
AutowireCapableBeanFactory
postProcessAfterInitialization
methods.
The returned bean instance may be a wrapper around the original.
applyBeanPostProcessorsAfterInitialization
in interface AutowireCapableBeanFactory
existingBean
- the new bean instancebeanName
- the name of the bean
BeansException
- if any post-processing failedBeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)
public Object applyBeanPostProcessorsAfterInitialization(Object bean, String beanName, RootBeanDefinition mergedBeanDefinition) throws BeansException
bean
- the bean instancebeanName
- the name of the beanmergedBeanDefinition
- the corresponding bean definition,
for checking destroy methods (can be null)
BeansException
- if any post-processing failedBeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)
protected Object createBean(String beanName, RootBeanDefinition mergedBeanDefinition, Object[] args) throws BeansException
createBean
in class AbstractBeanFactory
beanName
- name of the beanmergedBeanDefinition
- the bean definition for the beanargs
- arguments to use if creating a prototype using explicit arguments
to a static factory method. This parameter must be null except in this case.
BeansException
- in case of errorscreateBean(String, RootBeanDefinition, Object[], boolean)
protected Object createBean(String beanName, RootBeanDefinition mergedBeanDefinition, Object[] args, boolean allowEagerCaching) throws BeansException
beanName
- name of the beanmergedBeanDefinition
- the bean definition for the beanargs
- arguments to use if this is a prototype constructed by a factory method.
In this case, this will override any args specified in the bean definitions.
This parameter should be null otherwise.allowEagerCaching
- whether eager caching of singletons is allowed
(typically true for normal beans, but false for inner beans)
BeansException
- in case of errorsprotected BeanWrapper instantiateUsingFactoryMethod(String beanName, RootBeanDefinition mergedBeanDefinition, Object[] args) throws BeansException
Implementation requires iterating over the static or instance methods with the name specified in the RootBeanDefinition (the method may be overloaded) and trying to match with the parameters. We don't have the types attached to constructor args, so trial and error is the only way to go here. The args array may contain argument values passed in programmatically via the overloaded getBean() method.
BeansException
protected BeanWrapper autowireConstructor(String beanName, RootBeanDefinition mergedBeanDefinition) throws BeansException
This corresponds to constructor injection: In this mode, a Spring bean factory is able to host components that expect constructor-based dependency resolution.
beanName
- name of the bean to autowire by typemergedBeanDefinition
- bean definition to update through autowiring
BeansException
protected void populateBean(String beanName, RootBeanDefinition mergedBeanDefinition, BeanWrapper bw) throws BeansException
beanName
- name of the beanmergedBeanDefinition
- the bean definition for the beanbw
- BeanWrapper with bean instance
BeansException
protected void autowireByName(String beanName, RootBeanDefinition mergedBeanDefinition, BeanWrapper bw, MutablePropertyValues pvs) throws BeansException
beanName
- name of the bean we're wiring up.
Useful for debugging messages; not used functionally.mergedBeanDefinition
- bean definition to update through autowiringbw
- BeanWrapper from which we can obtain information about the beanpvs
- the PropertyValues to register wired objects with
BeansException
protected void autowireByType(String beanName, RootBeanDefinition mergedBeanDefinition, BeanWrapper bw, MutablePropertyValues pvs) throws BeansException
This is like PicoContainer default, in which there must be exactly one bean of the property type in the bean factory. This makes bean factories simple to configure for small namespaces, but doesn't work as well as standard Spring behavior for bigger applications.
beanName
- name of the bean to autowire by typemergedBeanDefinition
- bean definition to update through autowiringbw
- BeanWrapper from which we can obtain information about the beanpvs
- the PropertyValues to register wired objects with
BeansException
protected String[] unsatisfiedObjectProperties(RootBeanDefinition mergedBeanDefinition, BeanWrapper bw)
mergedBeanDefinition
- the bean definition the bean was created withbw
- the BeanWrapper the bean was created with
BeanUtils.isSimpleProperty(java.lang.Class)
protected void dependencyCheck(String beanName, RootBeanDefinition mergedBeanDefinition, BeanWrapper bw, PropertyValues pvs) throws UnsatisfiedDependencyException
beanName
- the name of the beanmergedBeanDefinition
- the bean definition the bean was created withbw
- the BeanWrapper the bean was created withpvs
- the property values to be applied to the bean
UnsatisfiedDependencyException
protected Object resolveValueIfNecessary(String beanName, RootBeanDefinition mergedBeanDefinition, String argName, Object value) throws BeansException
BeansException
protected void invokeInitMethods(String beanName, Object bean, RootBeanDefinition mergedBeanDefinition) throws Throwable
To be called by createBean implementations of concrete subclasses.
beanName
- the bean has in the factory. Used for debug output.bean
- new bean instance we may need to initializemergedBeanDefinition
- the bean definition that the bean was created with
(can also be null, if initializing )
Throwable
- if thrown by init methods or by the invocation processinvokeCustomInitMethod(java.lang.String, java.lang.Object, java.lang.String)
,
createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
protected void invokeCustomInitMethod(String beanName, Object bean, String initMethodName) throws Throwable
Can be overridden in subclasses for custom resolution of init methods with arguments.
beanName
- the bean has in the factory. Used for debug output.bean
- new bean instance we may need to initializeinitMethodName
- the name of the custom init method
Throwable
invokeInitMethods(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)
protected abstract Map findMatchingBeans(Class requiredType) throws BeansException
requiredType
- the type of the beans to look up
BeansException
- in case of errorsautowireByType(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, org.springframework.beans.BeanWrapper, org.springframework.beans.MutablePropertyValues)
,
autowireConstructor(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition)
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |