org.springframework.beans.factory.support
Class RootBeanDefinition

java.lang.Object
  extended by org.springframework.core.AttributeAccessorSupport
      extended by org.springframework.beans.BeanMetadataAttributeAccessor
          extended by org.springframework.beans.factory.support.AbstractBeanDefinition
              extended by org.springframework.beans.factory.support.RootBeanDefinition
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, BeanMetadataElement, BeanDefinition, AttributeAccessor
Direct Known Subclasses:
ConfigurationClassBeanDefinitionReader.ConfigurationClassBeanDefinition

public class RootBeanDefinition
extends AbstractBeanDefinition

A root bean definition represents the merged bean definition that backs a specific bean in a Spring BeanFactory at runtime. It might have been created from multiple original bean definitions that inherit from each other, typically registered as GenericBeanDefinitions. A root bean definition is essentially the 'unified' bean definition view at runtime.

Root bean definitions may also be used for registering individual bean definitions in the configuration phase. However, since Spring 2.5, the preferred way to register bean definitions programmatically is the GenericBeanDefinition class. GenericBeanDefinition has the advantage that it allows to dynamically define parent dependencies, not 'hard-coding' the role as a root bean definition.

Author:
Rod Johnson, Juergen Hoeller
See Also:
GenericBeanDefinition, ChildBeanDefinition, Serialized Form

Field Summary
(package private)  java.lang.Boolean beforeInstantiationResolved
          Package-visible field that indicates a before-instantiation post-processor having kicked in
(package private)  java.lang.Object constructorArgumentLock
           
(package private)  boolean constructorArgumentsResolved
          Package-visible field that marks the constructor arguments as resolved
private  BeanDefinitionHolder decoratedDefinition
           
private  java.util.Set<java.lang.reflect.Member> externallyManagedConfigMembers
           
private  java.util.Set<java.lang.String> externallyManagedDestroyMethods
           
private  java.util.Set<java.lang.String> externallyManagedInitMethods
           
(package private)  boolean isFactoryMethodUnique
           
(package private)  boolean postProcessed
          Package-visible field that indicates MergedBeanDefinitionPostProcessor having been applied
(package private)  java.lang.Object postProcessingLock
           
(package private)  java.lang.Object[] preparedConstructorArguments
          Package-visible field for caching partly prepared constructor arguments
(package private)  java.lang.Object[] resolvedConstructorArguments
          Package-visible field for caching fully resolved constructor arguments
(package private)  java.lang.Object resolvedConstructorOrFactoryMethod
          Package-visible field for caching the resolved constructor or factory method
 
Fields inherited from class org.springframework.beans.factory.support.AbstractBeanDefinition
AUTOWIRE_AUTODETECT, AUTOWIRE_BY_NAME, AUTOWIRE_BY_TYPE, AUTOWIRE_CONSTRUCTOR, AUTOWIRE_NO, DEPENDENCY_CHECK_ALL, DEPENDENCY_CHECK_NONE, DEPENDENCY_CHECK_OBJECTS, DEPENDENCY_CHECK_SIMPLE, INFER_METHOD, SCOPE_DEFAULT
 
Fields inherited from interface org.springframework.beans.factory.config.BeanDefinition
ROLE_APPLICATION, ROLE_INFRASTRUCTURE, ROLE_SUPPORT, SCOPE_PROTOTYPE, SCOPE_SINGLETON
 
Constructor Summary
RootBeanDefinition()
          Create a new RootBeanDefinition, to be configured through its bean properties and configuration methods.
RootBeanDefinition(BeanDefinition original)
          Create a new RootBeanDefinition as deep copy of the given bean definition.
RootBeanDefinition(java.lang.Class beanClass)
          Create a new RootBeanDefinition for a singleton.
RootBeanDefinition(java.lang.Class beanClass, boolean singleton)
          Deprecated. since Spring 2.5, in favor of AbstractBeanDefinition.setScope(java.lang.String)
RootBeanDefinition(java.lang.Class beanClass, ConstructorArgumentValues cargs, MutablePropertyValues pvs)
          Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.
RootBeanDefinition(java.lang.Class beanClass, int autowireMode)
          Deprecated. as of Spring 3.0, in favor of AbstractBeanDefinition.setAutowireMode(int) usage
RootBeanDefinition(java.lang.Class beanClass, int autowireMode, boolean dependencyCheck)
          Create a new RootBeanDefinition for a singleton, using the given autowire mode.
RootBeanDefinition(java.lang.Class beanClass, MutablePropertyValues pvs)
          Deprecated. as of Spring 3.0, in favor of AbstractBeanDefinition.getPropertyValues() usage
RootBeanDefinition(java.lang.Class beanClass, MutablePropertyValues pvs, boolean singleton)
          Deprecated. since Spring 2.5, in favor of AbstractBeanDefinition.setScope(java.lang.String)
RootBeanDefinition(RootBeanDefinition original)
          Create a new RootBeanDefinition as deep copy of the given bean definition.
RootBeanDefinition(java.lang.String beanClassName)
          Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.
RootBeanDefinition(java.lang.String beanClassName, ConstructorArgumentValues cargs, MutablePropertyValues pvs)
          Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.
 
Method Summary
 RootBeanDefinition cloneBeanDefinition()
          Clone this bean definition.
 boolean equals(java.lang.Object other)
           
 BeanDefinitionHolder getDecoratedDefinition()
           
 java.lang.String getParentName()
          Return the name of the parent definition of this bean definition, if any.
 java.lang.reflect.Method getResolvedFactoryMethod()
          Return the resolved factory method as a Java Method object, if available.
 boolean isExternallyManagedConfigMember(java.lang.reflect.Member configMember)
           
 boolean isExternallyManagedDestroyMethod(java.lang.String destroyMethod)
           
 boolean isExternallyManagedInitMethod(java.lang.String initMethod)
           
 boolean isFactoryMethod(java.lang.reflect.Method candidate)
          Check whether the given candidate qualifies as a factory method.
 void registerExternallyManagedConfigMember(java.lang.reflect.Member configMember)
           
 void registerExternallyManagedDestroyMethod(java.lang.String destroyMethod)
           
 void registerExternallyManagedInitMethod(java.lang.String initMethod)
           
 void setDecoratedDefinition(BeanDefinitionHolder decoratedDefinition)
           
 void setParentName(java.lang.String parentName)
          Set the name of the parent definition of this bean definition, if any.
 void setUniqueFactoryMethodName(java.lang.String name)
          Specify a factory method name that refers to a non-overloaded method.
 java.lang.String toString()
           
 
Methods inherited from class org.springframework.beans.factory.support.AbstractBeanDefinition
addQualifier, applyDefaults, clone, copyQualifiersFrom, getAutowireMode, getBeanClass, getBeanClassName, getConstructorArgumentValues, getDependencyCheck, getDependsOn, getDescription, getDestroyMethodName, getFactoryBeanName, getFactoryMethodName, getInitMethodName, getMethodOverrides, getOriginatingBeanDefinition, getPropertyValues, getQualifier, getQualifiers, getResolvedAutowireMode, getResource, getResourceDescription, getRole, getScope, hasBeanClass, hasConstructorArgumentValues, hashCode, hasQualifier, isAbstract, isAutowireCandidate, isEnforceDestroyMethod, isEnforceInitMethod, isLazyInit, isLenientConstructorResolution, isNonPublicAccessAllowed, isPrimary, isPrototype, isSingleton, isSynthetic, overrideFrom, overrideFrom, prepareMethodOverride, prepareMethodOverrides, resolveBeanClass, setAbstract, setAutowireCandidate, setAutowireMode, setBeanClass, setBeanClassName, setConstructorArgumentValues, setDependencyCheck, setDependsOn, setDescription, setDestroyMethodName, setEnforceDestroyMethod, setEnforceInitMethod, setFactoryBeanName, setFactoryMethodName, setInitMethodName, setLazyInit, setLenientConstructorResolution, setMethodOverrides, setNonPublicAccessAllowed, setOriginatingBeanDefinition, setPrimary, setPropertyValues, setResource, setResourceDescription, setRole, setScope, setSingleton, setSynthetic, validate
 
Methods inherited from class org.springframework.beans.BeanMetadataAttributeAccessor
addMetadataAttribute, getAttribute, getMetadataAttribute, getSource, removeAttribute, setAttribute, setSource
 
Methods inherited from class org.springframework.core.AttributeAccessorSupport
attributeNames, copyAttributesFrom, hasAttribute
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.springframework.core.AttributeAccessor
attributeNames, getAttribute, hasAttribute, removeAttribute, setAttribute
 
Methods inherited from interface org.springframework.beans.BeanMetadataElement
getSource
 

Field Detail

externallyManagedConfigMembers

private final java.util.Set<java.lang.reflect.Member> externallyManagedConfigMembers

externallyManagedInitMethods

private final java.util.Set<java.lang.String> externallyManagedInitMethods

externallyManagedDestroyMethods

private final java.util.Set<java.lang.String> externallyManagedDestroyMethods

decoratedDefinition

private BeanDefinitionHolder decoratedDefinition

isFactoryMethodUnique

boolean isFactoryMethodUnique

resolvedConstructorOrFactoryMethod

java.lang.Object resolvedConstructorOrFactoryMethod
Package-visible field for caching the resolved constructor or factory method


constructorArgumentsResolved

boolean constructorArgumentsResolved
Package-visible field that marks the constructor arguments as resolved


resolvedConstructorArguments

java.lang.Object[] resolvedConstructorArguments
Package-visible field for caching fully resolved constructor arguments


preparedConstructorArguments

java.lang.Object[] preparedConstructorArguments
Package-visible field for caching partly prepared constructor arguments


constructorArgumentLock

final java.lang.Object constructorArgumentLock

beforeInstantiationResolved

volatile java.lang.Boolean beforeInstantiationResolved
Package-visible field that indicates a before-instantiation post-processor having kicked in


postProcessed

boolean postProcessed
Package-visible field that indicates MergedBeanDefinitionPostProcessor having been applied


postProcessingLock

final java.lang.Object postProcessingLock
Constructor Detail

RootBeanDefinition

public RootBeanDefinition()
Create a new RootBeanDefinition, to be configured through its bean properties and configuration methods.

See Also:
AbstractBeanDefinition.setBeanClass(java.lang.Class), AbstractBeanDefinition.setBeanClassName(java.lang.String), AbstractBeanDefinition.setScope(java.lang.String), AbstractBeanDefinition.setAutowireMode(int), AbstractBeanDefinition.setDependencyCheck(int), AbstractBeanDefinition.setConstructorArgumentValues(org.springframework.beans.factory.config.ConstructorArgumentValues), AbstractBeanDefinition.setPropertyValues(org.springframework.beans.MutablePropertyValues)

RootBeanDefinition

public RootBeanDefinition(java.lang.Class beanClass)
Create a new RootBeanDefinition for a singleton.

Parameters:
beanClass - the class of the bean to instantiate

RootBeanDefinition

@Deprecated
public RootBeanDefinition(java.lang.Class beanClass,
                                     boolean singleton)
Deprecated. since Spring 2.5, in favor of AbstractBeanDefinition.setScope(java.lang.String)

Create a new RootBeanDefinition with the given singleton status.

Parameters:
beanClass - the class of the bean to instantiate
singleton - the singleton status of the bean

RootBeanDefinition

@Deprecated
public RootBeanDefinition(java.lang.Class beanClass,
                                     int autowireMode)
Deprecated. as of Spring 3.0, in favor of AbstractBeanDefinition.setAutowireMode(int) usage

Create a new RootBeanDefinition for a singleton, using the given autowire mode.

Parameters:
beanClass - the class of the bean to instantiate
autowireMode - by name or type, using the constants in this interface

RootBeanDefinition

public RootBeanDefinition(java.lang.Class beanClass,
                          int autowireMode,
                          boolean dependencyCheck)
Create a new RootBeanDefinition for a singleton, using the given autowire mode.

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 objects (not applicable to autowiring a constructor, thus ignored there)

RootBeanDefinition

@Deprecated
public RootBeanDefinition(java.lang.Class beanClass,
                                     MutablePropertyValues pvs)
Deprecated. as of Spring 3.0, in favor of AbstractBeanDefinition.getPropertyValues() usage

Create a new RootBeanDefinition for a singleton, providing property values.

Parameters:
beanClass - the class of the bean to instantiate
pvs - the property values to apply

RootBeanDefinition

@Deprecated
public RootBeanDefinition(java.lang.Class beanClass,
                                     MutablePropertyValues pvs,
                                     boolean singleton)
Deprecated. since Spring 2.5, in favor of AbstractBeanDefinition.setScope(java.lang.String)

Create a new RootBeanDefinition with the given singleton status, providing property values.

Parameters:
beanClass - the class of the bean to instantiate
pvs - the property values to apply
singleton - the singleton status of the bean

RootBeanDefinition

public RootBeanDefinition(java.lang.Class beanClass,
                          ConstructorArgumentValues cargs,
                          MutablePropertyValues pvs)
Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.

Parameters:
beanClass - the class of the bean to instantiate
cargs - the constructor argument values to apply
pvs - the property values to apply

RootBeanDefinition

public RootBeanDefinition(java.lang.String beanClassName)
Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.

Takes a bean class name to avoid eager loading of the bean class.

Parameters:
beanClassName - the name of the class to instantiate

RootBeanDefinition

public RootBeanDefinition(java.lang.String beanClassName,
                          ConstructorArgumentValues cargs,
                          MutablePropertyValues pvs)
Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.

Takes a bean class name to avoid eager loading of the bean class.

Parameters:
beanClassName - the name of the class to instantiate
cargs - the constructor argument values to apply
pvs - the property values to apply

RootBeanDefinition

public RootBeanDefinition(RootBeanDefinition original)
Create a new RootBeanDefinition as deep copy of the given bean definition.

Parameters:
original - the original bean definition to copy from

RootBeanDefinition

RootBeanDefinition(BeanDefinition original)
Create a new RootBeanDefinition as deep copy of the given bean definition.

Parameters:
original - the original bean definition to copy from
Method Detail

getParentName

public java.lang.String getParentName()
Description copied from interface: BeanDefinition
Return the name of the parent definition of this bean definition, if any.


setParentName

public void setParentName(java.lang.String parentName)
Description copied from interface: BeanDefinition
Set the name of the parent definition of this bean definition, if any.


setUniqueFactoryMethodName

public void setUniqueFactoryMethodName(java.lang.String name)
Specify a factory method name that refers to a non-overloaded method.


isFactoryMethod

public boolean isFactoryMethod(java.lang.reflect.Method candidate)
Check whether the given candidate qualifies as a factory method.


getResolvedFactoryMethod

public java.lang.reflect.Method getResolvedFactoryMethod()
Return the resolved factory method as a Java Method object, if available.

Returns:
the factory method, or null if not found or not resolved yet

registerExternallyManagedConfigMember

public void registerExternallyManagedConfigMember(java.lang.reflect.Member configMember)

isExternallyManagedConfigMember

public boolean isExternallyManagedConfigMember(java.lang.reflect.Member configMember)

registerExternallyManagedInitMethod

public void registerExternallyManagedInitMethod(java.lang.String initMethod)

isExternallyManagedInitMethod

public boolean isExternallyManagedInitMethod(java.lang.String initMethod)

registerExternallyManagedDestroyMethod

public void registerExternallyManagedDestroyMethod(java.lang.String destroyMethod)

isExternallyManagedDestroyMethod

public boolean isExternallyManagedDestroyMethod(java.lang.String destroyMethod)

setDecoratedDefinition

public void setDecoratedDefinition(BeanDefinitionHolder decoratedDefinition)

getDecoratedDefinition

public BeanDefinitionHolder getDecoratedDefinition()

cloneBeanDefinition

public RootBeanDefinition cloneBeanDefinition()
Description copied from class: AbstractBeanDefinition
Clone this bean definition. To be implemented by concrete subclasses.

Specified by:
cloneBeanDefinition in class AbstractBeanDefinition
Returns:
the cloned bean definition object

equals

public boolean equals(java.lang.Object other)
Overrides:
equals in class AbstractBeanDefinition

toString

public java.lang.String toString()
Overrides:
toString in class AbstractBeanDefinition