## 接口的使用
org.springframework.beans.factory.config.BeanDefinition

- 使用BeanDefinition的程序包
  程序包 | 说明
  --- | ---
  org.springframework.beans.factory.annotation | Support package for annotation-driven bean configuration.
  org.springframework.beans.factory.config | SPI interfaces and configuration-related convenience classes for bean factories.
  org.springframework.beans.factory.parsing | Support infrastructure for bean definition parsing.
  org.springframework.beans.factory.support | Classes supporting the `org.springframework.beans.factory` package.
  org.springframework.beans.factory.xml | Contains an abstract XML-based `BeanFactory` implementation, including a standard "spring-beans" XSD.

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

    org.springframework.beans.factory.annotation中BeanDefinition的子接口
    限定符和类型 | 接口和说明
    --- | ---
    `interface` | `AnnotatedBeanDefinition` Extended `BeanDefinition` interface that exposes `AnnotationMetadata` about its bean class - without requiring the class to be loaded yet.

    实现BeanDefinition的org.springframework.beans.factory.annotation中的类
    限定符和类型 | 类和说明
    --- | ---
    `class` | `AnnotatedGenericBeanDefinition` Extension of the `GenericBeanDefinition` class, adding support for annotation metadata exposed through the `AnnotatedBeanDefinition` interface.

  - ### org.springframework.beans.factory.config中BeanDefinition的使用

    返回BeanDefinition的org.springframework.beans.factory.config中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `BeanDefinition` | BeanDefinitionHolder.`getBeanDefinition()` Return the wrapped BeanDefinition.
    `BeanDefinition` | ConfigurableListableBeanFactory.`getBeanDefinition(String beanName)` Return the registered BeanDefinition for the specified bean, allowing access to its property values and constructor argument value (which can be modified during bean factory post-processing).
    `BeanDefinition` | ConfigurableBeanFactory.`getMergedBeanDefinition(String beanName)` Return a merged BeanDefinition for the given bean name, merging a child bean definition with its parent if necessary.
    `BeanDefinition` | BeanDefinition.`getOriginatingBeanDefinition()` Return the originating BeanDefinition, or `null` if none.

    参数类型为BeanDefinition的org.springframework.beans.factory.config中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | BeanDefinitionCustomizer.`customize(BeanDefinition bd)` Customize the given bean definition.
    `protected void` | DeprecatedBeanWarner.`logDeprecatedBean(String beanName, Class<?> beanType, BeanDefinition beanDefinition)` Logs a warning for a bean annotated with `@Deprecated`.
    `protected void` | BeanDefinitionVisitor.`visitBeanClassName(BeanDefinition beanDefinition)`
    `void` | BeanDefinitionVisitor.`visitBeanDefinition(BeanDefinition beanDefinition)` Traverse the given BeanDefinition object and the MutablePropertyValues and ConstructorArgumentValues contained in them.
    `protected void` | BeanDefinitionVisitor.`visitFactoryBeanName(BeanDefinition beanDefinition)`
    `protected void` | BeanDefinitionVisitor.`visitFactoryMethodName(BeanDefinition beanDefinition)`
    `protected void` | BeanDefinitionVisitor.`visitParentName(BeanDefinition beanDefinition)`
    `protected void` | BeanDefinitionVisitor.`visitScope(BeanDefinition beanDefinition)`

    参数类型为BeanDefinition的org.springframework.beans.factory.config中的构造器
    构造器和说明
    `BeanDefinitionHolder(BeanDefinition beanDefinition, String beanName)` Create a new BeanDefinitionHolder.
    `BeanDefinitionHolder(BeanDefinition beanDefinition, String beanName, String[] aliases)` Create a new BeanDefinitionHolder.

  - ### org.springframework.beans.factory.parsing中BeanDefinition的使用

    返回BeanDefinition的org.springframework.beans.factory.parsing中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `BeanDefinition[]` | AbstractComponentDefinition.`getBeanDefinitions()` Returns an empty array.
    `BeanDefinition[]` | BeanComponentDefinition.`getBeanDefinitions()`
    `BeanDefinition[]` | ComponentDefinition.`getBeanDefinitions()` Return the `BeanDefinitions` that were registered to form this `ComponentDefinition`.
    `BeanDefinition[]` | AbstractComponentDefinition.`getInnerBeanDefinitions()` Returns an empty array.
    `BeanDefinition[]` | BeanComponentDefinition.`getInnerBeanDefinitions()`
    `BeanDefinition[]` | ComponentDefinition.`getInnerBeanDefinitions()` Return the `BeanDefinitions` that represent all relevant inner beans within this component.

    参数类型为BeanDefinition的org.springframework.beans.factory.parsing中的构造器
    构造器和说明
    `BeanComponentDefinition(BeanDefinition beanDefinition, String beanName)` Create a new BeanComponentDefinition for the given bean.
    `BeanComponentDefinition(BeanDefinition beanDefinition, String beanName, String[] aliases)` Create a new BeanComponentDefinition for the given bean.

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

    实现BeanDefinition的org.springframework.beans.factory.support中的类
    限定符和类型 | 类和说明
    --- | ---
    `class` | `AbstractBeanDefinition` Base class for concrete, full-fledged `BeanDefinition` classes, factoring out common properties of `GenericBeanDefinition`, `RootBeanDefinition`, and `ChildBeanDefinition`.
    `class` | `ChildBeanDefinition` Bean definition for beans which inherit settings from their parent.
    `class` | `GenericBeanDefinition` GenericBeanDefinition is a one-stop shop for standard bean definition purposes.
    `class` | `RootBeanDefinition` A root bean definition represents the merged bean definition that backs a specific bean in a Spring BeanFactory at runtime.

    返回BeanDefinition的org.springframework.beans.factory.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected abstract BeanDefinition` | AbstractBeanFactory.`getBeanDefinition(String beanName)` Return the bean definition for the given bean name.
    `BeanDefinition` | BeanDefinitionRegistry.`getBeanDefinition(String beanName)` Return the BeanDefinition for the given bean name.
    `BeanDefinition` | DefaultListableBeanFactory.`getBeanDefinition(String beanName)` 从原始的bean定义map中获取
    `BeanDefinition` | SimpleBeanDefinitionRegistry.`getBeanDefinition(String beanName)`
    `BeanDefinition` | AbstractBeanFactory.`getMergedBeanDefinition(String name)` Return a 'merged' BeanDefinition for the given bean name, merging a child bean definition with its parent if necessary.
    `BeanDefinition` | AbstractBeanDefinition.`getOriginatingBeanDefinition()` Return the originating BeanDefinition, or `null` if none.

    参数类型为BeanDefinition的org.springframework.beans.factory.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected void` | AbstractAutowireCapableBeanFactory.`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.
    `protected Object` | AbstractBeanFactory.`evaluateBeanDefinitionString(String value, BeanDefinition beanDefinition)` Evaluate the given String as contained in a bean definition, potentially resolving it as an expression.
    `static String` | BeanDefinitionReaderUtils.`generateBeanName(BeanDefinition beanDefinition, BeanDefinitionRegistry registry)` Generate a bean name for the given top-level bean definition, unique within the given bean factory.
    `String` | BeanNameGenerator.`generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry)` Generate a bean name for the given bean definition.
    `String` | DefaultBeanNameGenerator.`generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry)`
    `static String` | BeanDefinitionReaderUtils.`generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry, boolean isInnerBean)` Generate a bean name for the given bean definition, unique within the given bean factory.
    `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.
    `void` | AbstractBeanDefinition.`overrideFrom(BeanDefinition other)` Override settings in this bean definition (presumably a copied parent from a parent-child inheritance relationship) from the given bean definition (presumably the child).
    `void` | BeanDefinitionRegistry.`registerBeanDefinition(String beanName, BeanDefinition beanDefinition)` Register a new bean definition with this registry.
    `void` | DefaultListableBeanFactory.`registerBeanDefinition(String beanName, BeanDefinition beanDefinition)`
    `void` | SimpleBeanDefinitionRegistry.`registerBeanDefinition(String beanName, BeanDefinition beanDefinition)`
    `void` | AbstractBeanDefinition.`setOriginatingBeanDefinition(BeanDefinition originatingBd)` Set the originating (e.g. decorated) BeanDefinition, if any.

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

  - ### org.springframework.beans.factory.xml中BeanDefinition的使用

    返回BeanDefinition的org.springframework.beans.factory.xml中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `BeanDefinition` | ParserContext.`getContainingBeanDefinition()`
    `BeanDefinition` | AbstractBeanDefinitionParser.`parse(Element element, ParserContext parserContext)`
    `BeanDefinition` | BeanDefinitionParser.`parse(Element element, ParserContext parserContext)` Parse the specified `Element` and register the resulting `BeanDefinition(s)` with the `BeanDefinitionRegistry` embedded in the supplied `ParserContext`.
    `BeanDefinition` | NamespaceHandler.`parse(Element element, ParserContext parserContext)` Parse the specified `Element` and register any resulting `BeanDefinitions` with the `BeanDefinitionRegistry` that is embedded in the supplied `ParserContext`.
    `BeanDefinition` | NamespaceHandlerSupport.`parse(Element element, ParserContext parserContext)` Parses the supplied `Element` by delegating to the `BeanDefinitionParser` that is registered for that `Element`.
    `BeanDefinition` | SimpleConstructorNamespaceHandler.`parse(Element element, ParserContext parserContext)`
    `BeanDefinition` | SimplePropertyNamespaceHandler.`parse(Element element, ParserContext parserContext)`
    `BeanDefinition` | BeanDefinitionParserDelegate.`parseCustomElement(Element ele)`
    `BeanDefinition` | BeanDefinitionParserDelegate.`parseCustomElement(Element ele, BeanDefinition containingBd)`

    参数类型为BeanDefinition的org.springframework.beans.factory.xml中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `BeanDefinitionHolder` | BeanDefinitionParserDelegate.`decorateBeanDefinitionIfRequired(Element ele, BeanDefinitionHolder definitionHolder, BeanDefinition containingBd)`
    `BeanDefinitionHolder` | BeanDefinitionParserDelegate.`decorateIfRequired(Node node, BeanDefinitionHolder originalDef, BeanDefinition containingBd)`
    `String` | XmlReaderContext.`generateBeanName(BeanDefinition beanDefinition)` Call the bean name generator for the given bean definition.
    `Object` | BeanDefinitionParserDelegate.`parseArrayElement(Element arrayEle, BeanDefinition bd)` Parse an array element.
    `AbstractBeanDefinition` | BeanDefinitionParserDelegate.`parseBeanDefinitionAttributes(Element ele, String beanName, BeanDefinition containingBean, AbstractBeanDefinition bd)` Apply the attributes of the given bean element to the given bean * definition.
    `BeanDefinitionHolder` | BeanDefinitionParserDelegate.`parseBeanDefinitionElement(Element ele, BeanDefinition containingBean)` Parses the supplied `<bean>` element.
    `AbstractBeanDefinition` | BeanDefinitionParserDelegate.`parseBeanDefinitionElement(Element ele, String beanName, BeanDefinition containingBean)` Parse the bean definition itself, without regard to name or aliases.
    `protected void` | BeanDefinitionParserDelegate.`parseCollectionElements(NodeList elementNodes, Collection<Object> target, BeanDefinition bd, String defaultElementType)`
    `void` | BeanDefinitionParserDelegate.`parseConstructorArgElement(Element ele, BeanDefinition bd)` Parse a constructor-arg element.
    `void` | BeanDefinitionParserDelegate.`parseConstructorArgElements(Element beanEle, BeanDefinition bd)` Parse constructor-arg sub-elements of the given bean element.
    `BeanDefinition` | BeanDefinitionParserDelegate.`parseCustomElement(Element ele, BeanDefinition containingBd)`
    `protected Object` | BeanDefinitionParserDelegate.`parseKeyElement(Element keyEle, BeanDefinition bd, String defaultKeyTypeName)` Parse a key sub-element of a map element.
    `List<Object>` | BeanDefinitionParserDelegate.`parseListElement(Element collectionEle, BeanDefinition bd)` Parse a list element.
    `Map<Object,Object>` | BeanDefinitionParserDelegate.`parseMapElement(Element mapEle, BeanDefinition bd)` Parse a map element.
    `void` | BeanDefinitionParserDelegate.`parsePropertyElement(Element ele, BeanDefinition bd)` Parse a property element.
    `void` | BeanDefinitionParserDelegate.`parsePropertyElements(Element beanEle, BeanDefinition bd)` Parse property sub-elements of the given bean element.
    `Object` | BeanDefinitionParserDelegate.`parsePropertySubElement(Element ele, BeanDefinition bd)`
    `Object` | BeanDefinitionParserDelegate.`parsePropertySubElement(Element ele, BeanDefinition bd, String defaultValueType)` Parse a value, ref or collection sub-element of a property or constructor-arg element.
    `Object` | BeanDefinitionParserDelegate.`parsePropertyValue(Element ele, BeanDefinition bd, String propertyName)` Get the value of a property element.
    `Set<Object>` | BeanDefinitionParserDelegate.`parseSetElement(Element collectionEle, BeanDefinition bd)` Parse a set element.
    `String` | XmlReaderContext.`registerWithGeneratedName(BeanDefinition beanDefinition)` Call the bean name generator for the given bean definition and register the bean definition under the generated name.

    参数类型为BeanDefinition的org.springframework.beans.factory.xml中的构造器
    构造器和说明
    `ParserContext(XmlReaderContext readerContext, BeanDefinitionParserDelegate delegate, BeanDefinition containingBeanDefinition)`