org.springframework.aop

## Interface TargetSource

- All Superinterfaces:
    TargetClassAware
  All Known Implementing Classes:
    AbstractBeanFactoryBasedTargetSource, AbstractLazyCreationTargetSource, AbstractPoolingTargetSource, AbstractPrototypeBasedTargetSource, AbstractRefreshableTargetSource, BeanFactoryRefreshableTargetSource, CommonsPoolTargetSource, EmptyTargetSource, HotSwappableTargetSource, JndiObjectTargetSource, LazyInitTargetSource, PrototypeTargetSource, RefreshableScriptTargetSource, SimpleBeanTargetSource, SingletonTargetSource, ThreadLocalTargetSource

      public interface TargetSource
      extends TargetClassAware

  A `TargetSource` is used to obtain the current "target" of an AOP invocation, which will be invoked via reflection if no around advice chooses to end the interceptor chain itself.

  If a `TargetSource` is "static", it will always return the same target, allowing optimizations in the AOP framework. Dynamic target sources can support pooling, hot swapping, etc.

  Application developers don't usually need to work with `TargetSources` directly: this is an AOP framework interface.

  Author:
    Rod Johnson

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Object` | `getTarget()` Return a target instance.
    `Class<?>` | `getTargetClass()` Return the type of targets returned by this `TargetSource`.
    `boolean` | `isStatic()` Will all calls to `getTarget()` return the same object?
    `void` | `releaseTarget(Object target)` Release the given target object obtained from the `getTarget()` method.

- - ### Method Detail

    - #### getTargetClass

          Class<?> getTargetClass()

      Return the type of targets returned by this `TargetSource`.

      Can return `null`, although certain usages of a `TargetSource` might just work with a predetermined target class.

      Specified by:
        `getTargetClass` in interface `TargetClassAware`
      Returns:
        the type of targets returned by this `TargetSource`

    - #### isStatic

          boolean isStatic()

      Will all calls to `getTarget()` return the same object?

      In that case, there will be no need to invoke `releaseTarget(Object)`, and the AOP framework can cache the return value of `getTarget()`.

      Returns:
        `true` if the target is immutable
      See Also:
        `getTarget()`

    - #### getTarget

          Object getTarget()
                           throws Exception

      Return a target instance. Invoked immediately before the AOP framework calls the "target" of an AOP method invocation.
      Returns:
        the target object, which contains the joinpoint
      Throws:
        `Exception` - if the target object can't be resolved

    - #### releaseTarget

          void releaseTarget(Object target)
                             throws Exception

      Release the given target object obtained from the `getTarget()` method.
      Parameters:
        `target` - object obtained from a call to `getTarget()`
      Throws:
        `Exception` - if the object can't be released