## org.springframework.aop.target.dynamic
Class AbstractRefreshableTargetSource

    java.lang.Object
      org.springframework.aop.target.dynamic.AbstractRefreshableTargetSource

All Implemented Interfaces:
  Refreshable, TargetClassAware, TargetSource

Direct Known Subclasses:
  BeanFactoryRefreshableTargetSource

    public abstract class AbstractRefreshableTargetSource

extends Object
implements TargetSource, Refreshable

Abstract `TargetSource` implementation that wraps a refreshable target object. Subclasses can determine whether a refresh is required, and need to provide fresh target objects.

Implements the `Refreshable` interface in order to allow for explicit control over the refresh status.

Since:
  2.0
Author:
  Rod Johnson, Rob Harrop, Juergen Hoeller
See Also:
  `requiresRefresh()`, `freshTarget()`

Field Summary
`protected Log` `logger` Logger available to subclasses
`protected Object` `targetObject`

Constructor Summary
`AbstractRefreshableTargetSource()`

Method Summary
`protected abstract Object` `freshTarget()` Obtain a fresh target object.
`long` `getLastRefreshTime()` Return the last time an actual refresh happened (as timestamp).
`long` `getRefreshCount()` Return the number of actual refreshes since startup.
`Object` `getTarget()` Return a target instance.
`Class<?>` `getTargetClass()` Return the type of targets returned by this `TargetSource`.
`boolean` `isStatic()` Not static.
`void` `refresh()` Refresh the underlying target object.
`void` `releaseTarget(Object object)` No need to release target.
`protected boolean` `requiresRefresh()` Determine whether a refresh is required.
`void` `setRefreshCheckDelay(long refreshCheckDelay)` Set the delay between refresh checks, in milliseconds.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### logger

    protected Log logger

  Logger available to subclasses

### targetObject

    protected Object targetObject

Constructor Detail

### AbstractRefreshableTargetSource

    public AbstractRefreshableTargetSource()

Method Detail

### setRefreshCheckDelay

    public void setRefreshCheckDelay(long refreshCheckDelay)

  Set the delay between refresh checks, in milliseconds. Default is -1, indicating no refresh checks at all.

  Note that an actual refresh will only happen when `requiresRefresh()` returns `true`.

### getTargetClass

    public Class<?> getTargetClass()

  Description copied from interface: `TargetSource`
  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`
  Specified by:
    `getTargetClass` in interface `TargetSource`
  Returns:
    the type of targets returned by this `TargetSource`

### isStatic

    public boolean isStatic()

  Not static.

  Specified by:
    `isStatic` in interface `TargetSource`
  Returns:
    `true` if the target is immutable
  See Also:
    `TargetSource.getTarget()`

### getTarget

    public final Object getTarget()

  Description copied from interface: `TargetSource`
  Return a target instance. Invoked immediately before the AOP framework calls the "target" of an AOP method invocation.

  Specified by:
    `getTarget` in interface `TargetSource`
  Returns:
    the target object, which contains the joinpoint

### releaseTarget

    public void releaseTarget(Object object)

  No need to release target.

  Specified by:
    `releaseTarget` in interface `TargetSource`
  Parameters:
    `object` - object obtained from a call to `TargetSource.getTarget()`

### refresh

    public final void refresh()

  Description copied from interface: `Refreshable`
  Refresh the underlying target object.

  Specified by:
    `refresh` in interface `Refreshable`

### getRefreshCount

    public long getRefreshCount()

  Description copied from interface: `Refreshable`
  Return the number of actual refreshes since startup.

  Specified by:
    `getRefreshCount` in interface `Refreshable`

### getLastRefreshTime

    public long getLastRefreshTime()

  Description copied from interface: `Refreshable`
  Return the last time an actual refresh happened (as timestamp).

  Specified by:
    `getLastRefreshTime` in interface `Refreshable`

### requiresRefresh

    protected boolean requiresRefresh()

  Determine whether a refresh is required. Invoked for each refresh check, after the refresh check delay has elapsed.

  The default implementation always returns `true`, triggering a refresh every time the delay has elapsed. To be overridden by subclasses with an appropriate check of the underlying target resource.

  Returns:
    whether a refresh is required

### freshTarget

    protected abstract Object freshTarget()

  Obtain a fresh target object.

  Only invoked if a refresh check has found that a refresh is required (that is, `requiresRefresh()` has returned `true`).

  Returns:
    the fresh target object