org.springframework.ejb.interceptor
Class SpringBeanAutowiringInterceptor

java.lang.Object
  extended by 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 <context:component-scan> 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), AbstractEnterpriseBean.setBeanFactoryLocator(org.springframework.beans.factory.access.BeanFactoryLocator), AbstractEnterpriseBean.setBeanFactoryLocatorKey(java.lang.String)

Constructor Summary
SpringBeanAutowiringInterceptor()
           
 
Method Summary
 void autowireBean(javax.interceptor.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(javax.interceptor.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(javax.interceptor.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(javax.interceptor.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