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