Package org.apache.struts2.spring.interceptor

# Class ActionAutowiringInterceptor

java.lang.Object
org.apache.struts2.interceptor.AbstractInterceptor
org.apache.struts2.spring.interceptor.ActionAutowiringInterceptor

All Implemented Interfaces:
  `Serializable`, `ConditionalInterceptor`, `Interceptor`, `org.springframework.beans.factory.Aware`, `org.springframework.context.ApplicationContextAware`

public class ActionAutowiringInterceptor extends AbstractInterceptor implements org.springframework.context.ApplicationContextAware
TODO: Give a description of the Interceptor. TODO: Describe the parameters for this Interceptor. TODO: Discuss some possible extension of the Interceptor.

     <!-- TODO: Describe how the Interceptor reference will effect execution -->
     <action name="someAction" class="com.examples.SomeAction">
          TODO: fill in the interceptor reference.
         <interceptor-ref name=""/>
         <result name="success">good_result.ftl</result>
     </action>

Autowires action classes to Spring beans. The strategy for autowiring the beans can be configured by setting the parameter on the interceptor. Actions that need access to the `ActionContext` can implements the `ApplicationContextAware` interface. The context will also be placed on the action context under the APPLICATION_CONTEXT attribute.

Author:
  Simon Stewart, Eric Hauser
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ActionAutowiringInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected org.springframework.context.ApplicationContext`
  `getApplicationContext()`
  `String`
  `intercept(ActionInvocation invocation)`
  Looks for the `ApplicationContext` under the attribute that the Spring listener sets in the servlet context.
  `void`
  `setApplicationContext(org.springframework.context.ApplicationContext applicationContext)`
  `void`
  `setAutowireStrategy(Integer autowireStrategy)`

  ### Methods inherited from class org.apache.struts2.interceptor.AbstractInterceptor

  `destroy, init, setDisabled, shouldIntercept`

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

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

- ## Constructor Details

  - ### ActionAutowiringInterceptor

    public ActionAutowiringInterceptor()

- ## Method Details

  - ### setAutowireStrategy

    public void setAutowireStrategy(Integer autowireStrategy)
    Parameters:
      `autowireStrategy` - the autowire strategy

  - ### intercept

    public String intercept(ActionInvocation invocation) throws Exception

    Looks for the `ApplicationContext` under the attribute that the Spring listener sets in the servlet context. The configuration is done the first time here instead of in init() since the `ActionContext` is not available during `Interceptor` initialization.

    Autowires the action to Spring beans and places the `ApplicationContext` on the `ActionContext`

    TODO: Should this check to see if the `SpringObjectFactory` has already been configured instead of instantiating a new one? Or is there a good reason for the interceptor to have it's own factory?

    Specified by:
      `intercept` in interface `Interceptor`
    Specified by:
      `intercept` in class `AbstractInterceptor`
    Parameters:
      `invocation` - the action invocation
    Throws:
      `Exception` - in case of any errors

  - ### setApplicationContext

    public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws org.springframework.beans.BeansException
    Specified by:
      `setApplicationContext` in interface `org.springframework.context.ApplicationContextAware`
    Parameters:
      `applicationContext` - the application context
    Throws:
      `org.springframework.beans.BeansException` - in case of errors

  - ### getApplicationContext

    protected org.springframework.context.ApplicationContext getApplicationContext()
    Returns:
      the application context