## 类的使用
org.springframework.beans.factory.support.RootBeanDefinition

- 使用RootBeanDefinition的程序包
  程序包 | 说明
  --- | ---
  org.springframework.beans.factory.annotation | Support package for annotation-driven bean configuration.
  org.springframework.beans.factory.support | Classes supporting the `org.springframework.beans.factory` package.

- - ### org.springframework.beans.factory.annotation中RootBeanDefinition的使用

    参数类型为RootBeanDefinition的org.springframework.beans.factory.annotation中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | InjectionMetadata.`checkConfigMembers(RootBeanDefinition beanDefinition)`
    `protected Annotation` | QualifierAnnotationAutowireCandidateResolver.`getFactoryMethodAnnotation(RootBeanDefinition bd, Class<? extends Annotation> type)`
    `protected Annotation` | QualifierAnnotationAutowireCandidateResolver.`getQualifiedElementAnnotation(RootBeanDefinition bd, Class<? extends Annotation> type)`
    `void` | AutowiredAnnotationBeanPostProcessor.`postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)`
    `void` | InitDestroyAnnotationBeanPostProcessor.`postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)`
    `void` | RequiredAnnotationBeanPostProcessor.`postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)`

  - ### org.springframework.beans.factory.support中RootBeanDefinition的使用

    返回RootBeanDefinition的org.springframework.beans.factory.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `RootBeanDefinition` | RootBeanDefinition.`cloneBeanDefinition()`
    `protected RootBeanDefinition` | AbstractBeanFactory.`getMergedBeanDefinition(String beanName, BeanDefinition bd)` Return a RootBeanDefinition for the given top-level bean, by merging with the parent if the given bean's definition is a child bean definition.
    `protected RootBeanDefinition` | AbstractBeanFactory.`getMergedBeanDefinition(String beanName, BeanDefinition bd, BeanDefinition containingBd)` Return a RootBeanDefinition for the given bean, by merging with the parent if the given bean's definition is a child bean definition.
    `protected RootBeanDefinition` | AbstractBeanFactory.`getMergedLocalBeanDefinition(String beanName)` Return a merged RootBeanDefinition, traversing the parent bean definition if the specified bean corresponds to a child bean definition.
    `protected RootBeanDefinition` | GenericTypeAwareAutowireCandidateResolver.`getResolvedDecoratedDefinition(RootBeanDefinition rbd)`

    参数类型为RootBeanDefinition的org.springframework.beans.factory.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected void` | AbstractAutowireCapableBeanFactory.`applyMergedBeanDefinitionPostProcessors(RootBeanDefinition mbd, Class<?> beanType, String beanName)` Apply MergedBeanDefinitionPostProcessors to the specified bean definition, invoking their `postProcessMergedBeanDefinition` methods.
    `protected BeanWrapper` | AbstractAutowireCapableBeanFactory.`autowireConstructor(String beanName, RootBeanDefinition mbd, Constructor<?>[] ctors, Object[] explicitArgs)` "autowire constructor" (with constructor arguments by type) behavior.
    `protected void` | AbstractBeanFactory.`checkMergedBeanDefinition(RootBeanDefinition mbd, String beanName, Object[] args)` Check the given merged bean definition, potentially throwing validation exceptions.
    `protected Object` | AbstractAutowireCapableBeanFactory.`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 abstract Object` | AbstractBeanFactory.`createBean(String beanName, RootBeanDefinition mbd, Object[] args)` 该方法定义在 AbstractBeanFactory 中，其含义是根据给定的 BeanDefinition 和 args 实例化一个 Bean 对象。
    `protected BeanWrapper` | AbstractAutowireCapableBeanFactory.`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 void` | AbstractBeanFactory.`destroyBean(String beanName, Object bean, RootBeanDefinition mbd)` Destroy the given bean instance (usually a prototype instance obtained from this factory) according to the given bean definition.
    `protected Class<?>` | AbstractAutowireCapableBeanFactory.`determineTargetType(String beanName, RootBeanDefinition mbd, Class<?>... typesToMatch)` Determine the target type for the given bean definition.
    `protected Object` | AbstractAutowireCapableBeanFactory.`doCreateBean(String beanName, RootBeanDefinition mbd, Object[] args)` 真的创建bean的逻辑,该方法是最复杂的包含了调用构造函数,给bean的属性赋值 调用bean的初始化操作以及 生成代理对象 都是在这里
    `protected Object` | AbstractAutowireCapableBeanFactory.`getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean)` 三级缓存通过函数接口回调方式（即不会立即缓存单例对象，而是等待调用时再返回） 这样做有什么好处呢？
    `protected Object` | AbstractAutowireCapableBeanFactory.`getObjectForBeanInstance(Object beanInstance, String name, String beanName, RootBeanDefinition mbd)` Overridden in order to implicitly register the currently created bean as dependent on further beans getting programmatically retrieved during a `Supplier` callback.
    `protected Object` | AbstractBeanFactory.`getObjectForBeanInstance(Object beanInstance, String name, String beanName, RootBeanDefinition mbd)` Get the object for the given bean instance, either the bean instance itself or its created object in case of a FactoryBean.
    `protected RootBeanDefinition` | GenericTypeAwareAutowireCandidateResolver.`getResolvedDecoratedDefinition(RootBeanDefinition rbd)`
    `protected org.springframework.core.ResolvableType` | GenericTypeAwareAutowireCandidateResolver.`getReturnTypeForFactoryMethod(RootBeanDefinition rbd, DependencyDescriptor descriptor)`
    `protected Class<?>` | AbstractAutowireCapableBeanFactory.`getTypeForFactoryBean(String beanName, RootBeanDefinition mbd)` This implementation attempts to query the FactoryBean's generic parameter metadata if present to determine the object type.
    `protected Class<?>` | AbstractBeanFactory.`getTypeForFactoryBean(String beanName, RootBeanDefinition mbd)` Determine the bean type for the given FactoryBean definition, as far as possible.
    `protected Class<?>` | AbstractAutowireCapableBeanFactory.`getTypeForFactoryMethod(String beanName, RootBeanDefinition mbd, Class<?>... typesToMatch)` Determine the target type for the given bean definition which is based on a factory method.
    `protected Object` | AbstractAutowireCapableBeanFactory.`initializeBean(String beanName, Object bean, RootBeanDefinition mbd)` Initialize the given bean instance, applying factory callbacks as well as init methods and bean post processors.
    `Object` | InstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner)` Return an instance of the bean with the given name in this factory.
    `Object` | SimpleInstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner)`
    `Object` | InstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, Constructor<?> ctor, Object... args)` Return an instance of the bean with the given name in this factory, creating it via the given constructor.
    `Object` | SimpleInstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, Constructor<?> ctor, Object... args)`
    `Object` | InstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, Object factoryBean, Method factoryMethod, Object... args)` Return an instance of the bean with the given name in this factory, creating it via the given factory method.
    `Object` | SimpleInstantiationStrategy.`instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, Object factoryBean, Method factoryMethod, Object... args)`
    `protected BeanWrapper` | AbstractAutowireCapableBeanFactory.`instantiateBean(String beanName, RootBeanDefinition mbd)` Instantiate the given bean using its default constructor.
    `protected BeanWrapper` | AbstractAutowireCapableBeanFactory.`instantiateUsingFactoryMethod(String beanName, RootBeanDefinition mbd, Object[] explicitArgs)` Instantiate the bean using a named factory method.
    `protected Object` | CglibSubclassingInstantiationStrategy.`instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner)`
    `protected Object` | SimpleInstantiationStrategy.`instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner)` Subclasses can override this method, which is implemented to throw UnsupportedOperationException, if they can instantiate an object with the Method Injection specified in the given RootBeanDefinition.
    `protected Object` | CglibSubclassingInstantiationStrategy.`instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner, Constructor<?> ctor, Object... args)`
    `protected Object` | SimpleInstantiationStrategy.`instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner, Constructor<?> ctor, Object... args)` Subclasses can override this method, which is implemented to throw UnsupportedOperationException, if they can instantiate an object with the Method Injection specified in the given RootBeanDefinition.
    `protected void` | AbstractAutowireCapableBeanFactory.`invokeCustomInitMethod(String beanName, Object bean, RootBeanDefinition mbd)` Invoke the specified custom init method on the given bean.
    `protected void` | AbstractAutowireCapableBeanFactory.`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` | DefaultListableBeanFactory.`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` | AbstractBeanFactory.`isFactoryBean(String beanName, RootBeanDefinition mbd)` Check whether the given bean is defined as a `FactoryBean`.
    `protected void` | AbstractAutowireCapableBeanFactory.`populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw)` 给我们的对象BeanWrapper赋值
    `void` | MergedBeanDefinitionPostProcessor.`postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)` Post-process the given merged bean definition for the specified bean.
    `protected Class<?>` | AbstractAutowireCapableBeanFactory.`predictBeanType(String beanName, RootBeanDefinition mbd, Class<?>... typesToMatch)`
    `protected Class<?>` | AbstractBeanFactory.`predictBeanType(String beanName, RootBeanDefinition mbd, Class<?>... typesToMatch)` Predict the eventual bean type (of the processed bean instance) for the specified bean.
    `protected void` | AbstractBeanFactory.`registerDisposableBeanIfNecessary(String beanName, Object bean, RootBeanDefinition mbd)` Add the given bean to the list of disposable beans in this factory, registering its DisposableBean interface and/or the given destroy method to be called on factory shutdown (if applicable).
    `protected boolean` | AbstractBeanFactory.`requiresDestruction(Object bean, RootBeanDefinition mbd)` Determine whether the given bean requires destruction on shutdown.
    `protected Class<?>` | AbstractBeanFactory.`resolveBeanClass(RootBeanDefinition mbd, String beanName, Class<?>... typesToMatch)` Resolve the bean class for the specified bean definition, resolving a bean class name into a Class reference (if necessary) and storing the resolved Class in the bean definition for further use.
    `protected Object` | AbstractAutowireCapableBeanFactory.`resolveBeforeInstantiation(String beanName, RootBeanDefinition mbd)` Apply before-instantiation post-processors, resolving whether there is a before-instantiation shortcut for the specified bean.

    参数类型为RootBeanDefinition的org.springframework.beans.factory.support中的构造器
    构造器和说明
    `RootBeanDefinition(RootBeanDefinition original)` Create a new RootBeanDefinition as deep copy of the given bean definition.