org.springframework.beans.factory.xml

## Interface BeanDefinitionDecorator

- All Known Implementing Classes:
    AbstractInterceptorDrivenBeanDefinitionDecorator

      public interface BeanDefinitionDecorator

  Interface used by the `DefaultBeanDefinitionDocumentReader` to handle custom, nested (directly under a `&lt;bean&gt;`) tags.

  Decoration may also occur based on custom attributes applied to the `&lt;bean&gt;` tag. Implementations are free to turn the metadata in the custom tag into as many `BeanDefinitions` as required and to transform the `BeanDefinition` of the enclosing `&lt;bean&gt;` tag, potentially even returning a completely different `BeanDefinition` to replace the original.

  `BeanDefinitionDecorators` should be aware that they may be part of a chain. In particular, a `BeanDefinitionDecorator` should be aware that a previous `BeanDefinitionDecorator` may have replaced the original `BeanDefinition` with a `ProxyFactoryBean` definition allowing for custom `interceptors` to be added.

  `BeanDefinitionDecorators` that wish to add an interceptor to the enclosing bean should extend `AbstractInterceptorDrivenBeanDefinitionDecorator` which handles the chaining ensuring that only one proxy is created and that it contains all interceptors from the chain.

  The parser locates a `BeanDefinitionDecorator` from the `NamespaceHandler` for the namespace in which the custom tag resides.

  Since:
    2.0
  Author:
    Rob Harrop
  See Also:
    `NamespaceHandler`, `BeanDefinitionParser`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `BeanDefinitionHolder` | `decorate(Node node, BeanDefinitionHolder definition, ParserContext parserContext)` Parse the specified `Node` (either an element or an attribute) and decorate the supplied `BeanDefinition`, returning the decorated definition.

- - ### Method Detail

    - #### decorate

          BeanDefinitionHolder decorate(Node node,
                                      BeanDefinitionHolder definition,
                                      ParserContext parserContext)

      Parse the specified `Node` (either an element or an attribute) and decorate the supplied `BeanDefinition`, returning the decorated definition.

      Implementations may choose to return a completely new definition, which will replace the original definition in the resulting `BeanFactory`.

      The supplied `ParserContext` can be used to register any additional beans needed to support the main definition.