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
`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