org.springframework.beans.factory.support

## Class RootBeanDefinition

- java.lang.Object
- - org.springframework.core.AttributeAccessorSupport
  - - org.springframework.beans.BeanMetadataAttributeAccessor
    - - org.springframework.beans.factory.support.AbstractBeanDefinition
      - - org.springframework.beans.factory.support.RootBeanDefinition

- All Implemented Interfaces:
    Serializable, Cloneable, BeanMetadataElement, BeanDefinition, AttributeAccessor

      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

    - ### 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

    Constructors
    Constructor and Description
    `RootBeanDefinition()` Create a new RootBeanDefinition, to be configured through its bean properties and configuration methods.
    `RootBeanDefinition(Class<?> beanClass)` Create a new RootBeanDefinition for a singleton.
    `RootBeanDefinition(Class<?> beanClass, ConstructorArgumentValues cargs, MutablePropertyValues pvs)` Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.
    `RootBeanDefinition(Class<?> beanClass, int autowireMode, boolean dependencyCheck)` Create a new RootBeanDefinition for a singleton, using the given autowire mode.
    `RootBeanDefinition(Class beanClass, boolean singleton)` Deprecated. since Spring 2.5, in favor of `AbstractBeanDefinition.setScope(java.lang.String)`
    `RootBeanDefinition(Class beanClass, int autowireMode)` Deprecated. as of Spring 3.0, in favor of `AbstractBeanDefinition.setAutowireMode(int)` usage
    `RootBeanDefinition(Class beanClass, MutablePropertyValues pvs)` Deprecated. as of Spring 3.0, in favor of `AbstractBeanDefinition.getPropertyValues()` usage
    `RootBeanDefinition(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(String beanClassName)` Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.
    `RootBeanDefinition(String beanClassName, ConstructorArgumentValues cargs, MutablePropertyValues pvs)` Create a new RootBeanDefinition for a singleton, providing constructor arguments and property values.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `RootBeanDefinition` | `cloneBeanDefinition()` Clone this bean definition.
    `boolean` | `equals(Object other)`
    `BeanDefinitionHolder` | `getDecoratedDefinition()` Return the target definition that is being decorated by this bean definition, if any.
    `String` | `getParentName()` Return the name of the parent definition of this bean definition, if any.
    `Method` | `getResolvedFactoryMethod()` Return the resolved factory method as a Java Method object, if available.
    `Class<?>` | `getTargetType()` Return the target type of this bean definition, if known (either specified in advance or resolved on first instantiation).
    `boolean` | `isExternallyManagedConfigMember(Member configMember)`
    `boolean` | `isExternallyManagedDestroyMethod(String destroyMethod)`
    `boolean` | `isExternallyManagedInitMethod(String initMethod)`
    `boolean` | `isFactoryMethod(Method candidate)` Check whether the given candidate qualifies as a factory method.
    `void` | `registerExternallyManagedConfigMember(Member configMember)`
    `void` | `registerExternallyManagedDestroyMethod(String destroyMethod)`
    `void` | `registerExternallyManagedInitMethod(String initMethod)`
    `void` | `setDecoratedDefinition(BeanDefinitionHolder decoratedDefinition)` Register a target definition that is being decorated by this bean definition.
    `void` | `setParentName(String parentName)` Set the name of the parent definition of this bean definition, if any.
    `void` | `setTargetType(Class<?> targetType)` Specify the target type of this bean definition, if known in advance.
    `void` | `setUniqueFactoryMethodName(String name)` Specify a factory method name that refers to a non-overloaded method.
    `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`

- - ### 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(Class<?> beanClass)

      Create a new RootBeanDefinition for a singleton.
      Parameters:
        `beanClass` - the class of the bean to instantiate

    - #### RootBeanDefinition

          @Deprecated
          public RootBeanDefinition(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(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(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(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(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(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(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(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

  - ### Method Detail

    - #### getParentName

          public String getParentName()

      Description copied from interface: `BeanDefinition`
      Return the name of the parent definition of this bean definition, if any.

    - #### setParentName

          public void setParentName(String parentName)

      Description copied from interface: `BeanDefinition`
      Set the name of the parent definition of this bean definition, if any.

    - #### setDecoratedDefinition

          public void setDecoratedDefinition(BeanDefinitionHolder decoratedDefinition)

      Register a target definition that is being decorated by this bean definition.

    - #### getDecoratedDefinition

          public BeanDefinitionHolder getDecoratedDefinition()

      Return the target definition that is being decorated by this bean definition, if any.

    - #### setTargetType

          public void setTargetType(Class<?> targetType)

      Specify the target type of this bean definition, if known in advance.

    - #### getTargetType

          public Class<?> getTargetType()

      Return the target type of this bean definition, if known (either specified in advance or resolved on first instantiation).

    - #### setUniqueFactoryMethodName

          public void setUniqueFactoryMethodName(String name)

      Specify a factory method name that refers to a non-overloaded method.

    - #### isFactoryMethod

          public boolean isFactoryMethod(Method candidate)

      Check whether the given candidate qualifies as a factory method.

    - #### getResolvedFactoryMethod

          public 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(Member configMember)

    - #### isExternallyManagedConfigMember

          public boolean isExternallyManagedConfigMember(Member configMember)

    - #### registerExternallyManagedInitMethod

          public void registerExternallyManagedInitMethod(String initMethod)

    - #### isExternallyManagedInitMethod

          public boolean isExternallyManagedInitMethod(String initMethod)

    - #### registerExternallyManagedDestroyMethod

          public void registerExternallyManagedDestroyMethod(String destroyMethod)

    - #### isExternallyManagedDestroyMethod

          public boolean isExternallyManagedDestroyMethod(String destroyMethod)

    - #### 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(Object other)

      Overrides:
        `equals` in class `AbstractBeanDefinition`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `AbstractBeanDefinition`