Package org.springframework.beans.factory.xml

# Interface BeanDefinitionDecorator

public interface BeanDefinitionDecorator
Interface used by the `DefaultBeanDefinitionDocumentReader` to handle custom, nested (directly under a `<bean>`) tags.

Decoration may also occur based on custom attributes applied to the `<bean>` 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 `<bean>` 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 `org.springframework.aop.framework.ProxyFactoryBean` definition allowing for custom `interceptors` to be added.

`BeanDefinitionDecorators` that wish to add an interceptor to the enclosing bean should extend `org.springframework.aop.config.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

Modifier and Type
Method
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 Details

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