Package org.springframework.aop

# Interface TargetSource

All Superinterfaces:
  `TargetClassAware`

All Known Implementing Classes:
  `AbstractBeanFactoryBasedTargetSource`, `AbstractLazyCreationTargetSource`, `AbstractPoolingTargetSource`, `AbstractPrototypeBasedTargetSource`, `AbstractRefreshableTargetSource`, `BeanFactoryRefreshableTargetSource`, `CommonsPool2TargetSource`, `EmptyTargetSource`, `HotSwappableTargetSource`, `LazyInitTargetSource`, `PrototypeTargetSource`, `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, Juergen Hoeller

## Method Summary

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

## Method Details

### getTargetClass

@Nullable 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

default 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()`.

The default implementation returns `false`.

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

### getTarget

@Nullable 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, or `null` if there is no actual target instance
Throws:
  `Exception` - if the target object can't be resolved

### releaseTarget

default void releaseTarget(Object target) throws Exception
Release the given target object obtained from the `getTarget()` method, if any.

The default implementation is empty.

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