SpringBeanAutowiringInterceptor (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.ejb.interceptor

## Class SpringBeanAutowiringInterceptor

- java.lang.Object
- - org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor

-     public class SpringBeanAutowiringInterceptor
      extends Object

  EJB3-compliant interceptor class that injects Spring beans into fields and methods which are annotated with `@Autowired`. Performs injection after construction as well as after activation of a passivated bean.

  To be applied through an `@Interceptors` annotation in the EJB Session Bean or Message-Driven Bean class, or through an `interceptor-binding` XML element in the EJB deployment descriptor.

  Delegates to Spring's `AutowiredAnnotationBeanPostProcessor` underneath, allowing for customization of its specific settings through overriding the `configureBeanPostProcessor(org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor, java.lang.Object)` template method.

  The actual BeanFactory to obtain Spring beans from is determined by the `getBeanFactory(java.lang.Object)` template method. The default implementation obtains the Spring `ContextSingletonBeanFactoryLocator`, initialized from the default resource location classpath*:beanRefContext.xml, and obtains the single ApplicationContext defined there.

  NOTE: If you have more than one shared ApplicationContext definition available in your EJB class loader, you need to override the `getBeanFactoryLocatorKey(java.lang.Object)` method and provide a specific locator key for each autowired EJB. Alternatively, override the `getBeanFactory(java.lang.Object)` template method and obtain the target factory explicitly.

  WARNING: Do not define the same bean as Spring-managed bean and as EJB3 session bean in the same deployment unit. In particular, be careful when using the `&lt;context:component-scan&gt;` feature in combination with the deployment of Spring-based EJB3 session beans: Make sure that the EJB3 session beans are not autodetected as Spring-managed beans as well, using appropriate package restrictions.

  Since:
    2.5.1
  Author:
    Juergen Hoeller
  See Also:
    `Autowired`, `AutowiredAnnotationBeanPostProcessor`, `ContextSingletonBeanFactoryLocator`, `getBeanFactoryLocatorKey(java.lang.Object)`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SpringBeanAutowiringInterceptor()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `autowireBean(InvocationContext invocationContext)` Autowire the target bean after construction as well as after passivation.
    `protected void` | `configureBeanPostProcessor(AutowiredAnnotationBeanPostProcessor processor, Object target)` Template method for configuring the `AutowiredAnnotationBeanPostProcessor` used for autowiring.
    `protected void` | `doAutowireBean(Object target)` Actually autowire the target bean after construction/passivation.
    `protected void` | `doReleaseBean(Object target)` Actually release the BeanFactoryReference for the given target bean.
    `protected BeanFactory` | `getBeanFactory(Object target)` Determine the BeanFactory for autowiring the given target bean.
    `protected BeanFactoryLocator` | `getBeanFactoryLocator(Object target)` Determine the BeanFactoryLocator to obtain the BeanFactoryReference from.
    `protected String` | `getBeanFactoryLocatorKey(Object target)` Determine the BeanFactoryLocator key to use.
    `protected BeanFactoryReference` | `getBeanFactoryReference(Object target)` Determine the BeanFactoryReference for the given target bean.
    `void` | `releaseBean(InvocationContext invocationContext)` Release the factory which has been used for autowiring the target bean.

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

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

- - ### Constructor Detail

    - #### SpringBeanAutowiringInterceptor

          public SpringBeanAutowiringInterceptor()

  - ### Method Detail

    - #### autowireBean

          @PostConstruct
          public void autowireBean(InvocationContext invocationContext)

      Autowire the target bean after construction as well as after passivation.
      Parameters:
        `invocationContext` - the EJB3 invocation context

    - #### doAutowireBean

          protected void doAutowireBean(Object target)

      Actually autowire the target bean after construction/passivation.
      Parameters:
        `target` - the target bean to autowire

    - #### configureBeanPostProcessor

          protected void configureBeanPostProcessor(AutowiredAnnotationBeanPostProcessor processor,
                                        Object target)

      Template method for configuring the `AutowiredAnnotationBeanPostProcessor` used for autowiring.
      Parameters:
        `processor` - the AutowiredAnnotationBeanPostProcessor to configure
        `target` - the target bean to autowire with this processor

    - #### getBeanFactory

          protected BeanFactory getBeanFactory(Object target)

      Determine the BeanFactory for autowiring the given target bean.
      Parameters:
        `target` - the target bean to autowire
      Returns:
        the BeanFactory to use (never `null`)
      See Also:
        `getBeanFactoryReference(java.lang.Object)`

    - #### getBeanFactoryReference

          protected BeanFactoryReference getBeanFactoryReference(Object target)

      Determine the BeanFactoryReference for the given target bean.

      The default implementation delegates to `getBeanFactoryLocator(java.lang.Object)` and `getBeanFactoryLocatorKey(java.lang.Object)`.

      Parameters:
        `target` - the target bean to autowire
      Returns:
        the BeanFactoryReference to use (never `null`)
      See Also:
        `getBeanFactoryLocator(java.lang.Object)`, `getBeanFactoryLocatorKey(java.lang.Object)`, `BeanFactoryLocator.useBeanFactory(String)`

    - #### getBeanFactoryLocator

          protected BeanFactoryLocator getBeanFactoryLocator(Object target)

      Determine the BeanFactoryLocator to obtain the BeanFactoryReference from.

      The default implementation exposes Spring's default `ContextSingletonBeanFactoryLocator`.

      Parameters:
        `target` - the target bean to autowire
      Returns:
        the BeanFactoryLocator to use (never `null`)
      See Also:
        `ContextSingletonBeanFactoryLocator.getInstance()`

    - #### getBeanFactoryLocatorKey

          protected String getBeanFactoryLocatorKey(Object target)

      Determine the BeanFactoryLocator key to use. This typically indicates the bean name of the ApplicationContext definition in classpath*:beanRefContext.xml resource files.

      The default is `null`, indicating the single ApplicationContext defined in the locator. This must be overridden if more than one shared ApplicationContext definition is available.

      Parameters:
        `target` - the target bean to autowire
      Returns:
        the BeanFactoryLocator key to use (or `null` for referring to the single ApplicationContext defined in the locator)

    - #### releaseBean

          @PreDestroy
          public void releaseBean(InvocationContext invocationContext)

      Release the factory which has been used for autowiring the target bean.
      Parameters:
        `invocationContext` - the EJB3 invocation context

    - #### doReleaseBean

          protected void doReleaseBean(Object target)

      Actually release the BeanFactoryReference for the given target bean.
      Parameters:
        `target` - the target bean to release