org.springframework.aop.config

## Class AbstractInterceptorDrivenBeanDefinitionDecorator

- java.lang.Object
- - org.springframework.aop.config.AbstractInterceptorDrivenBeanDefinitionDecorator

- All Implemented Interfaces:
    BeanDefinitionDecorator

      public abstract class AbstractInterceptorDrivenBeanDefinitionDecorator
      extends Object
      implements BeanDefinitionDecorator

  Base implementation for `BeanDefinitionDecorators` wishing to add an `interceptor` to the resulting bean.

  This base class controls the creation of the `ProxyFactoryBean` bean definition and wraps the original as an inner-bean definition for the `target` property of `ProxyFactoryBean`.

  Chaining is correctly handled, ensuring that only one `ProxyFactoryBean` definition is created. If a previous `BeanDefinitionDecorator` already created the `ProxyFactoryBean` then the interceptor is simply added to the existing definition.

  Subclasses have only to create the `BeanDefinition` to the interceptor that they wish to add.

  Since:
    2.0
  Author:
    Rob Harrop, Juergen Hoeller
  See Also:
    `MethodInterceptor`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractInterceptorDrivenBeanDefinitionDecorator()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract BeanDefinition` | `createInterceptorDefinition(Node node)` Subclasses should implement this method to return the `BeanDefinition` for the interceptor they wish to apply to the bean being decorated.
    `BeanDefinitionHolder` | `decorate(Node node, BeanDefinitionHolder definitionHolder, ParserContext parserContext)` Parse the specified `Node` (either an element or an attribute) and decorate the supplied `BeanDefinition`, returning the decorated definition.
    `protected String` | `getInterceptorNameSuffix(BeanDefinition interceptorDefinition)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AbstractInterceptorDrivenBeanDefinitionDecorator

          public AbstractInterceptorDrivenBeanDefinitionDecorator()

  - ### Method Detail

    - #### decorate

          public final BeanDefinitionHolder decorate(Node node,
                                      BeanDefinitionHolder definitionHolder,
                                      ParserContext parserContext)

      Description copied from interface: `BeanDefinitionDecorator`
      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.

      Specified by:
        `decorate` in interface `BeanDefinitionDecorator`

    - #### getInterceptorNameSuffix

          protected String getInterceptorNameSuffix(BeanDefinition interceptorDefinition)

    - #### createInterceptorDefinition

          protected abstract BeanDefinition createInterceptorDefinition(Node node)

      Subclasses should implement this method to return the `BeanDefinition` for the interceptor they wish to apply to the bean being decorated.