Package 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

Fields
Modifier and Type
Field
Description
`protected final org.apache.commons.logging.Log`
`logger`
Logger available to subclasses.
`protected Object`
`targetObject`

## Constructor Summary

Constructors
Constructor
Description
`AbstractRefreshableTargetSource()`

## Method Summary

Modifier and Type
Method
Description
`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.
`final Object`
`getTarget()`
Return a target instance.
`Class<?>`
`getTargetClass()`
Return the type of targets returned by this `TargetSource`.
`final void`
`refresh()`
Refresh the underlying target object.
`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`

### Methods inherited from interface org.springframework.aop.TargetSource

`isStatic, releaseTarget`

## Field Details

### logger

protected final org.apache.commons.logging.Log logger
Logger available to subclasses.

### targetObject

@Nullable protected Object targetObject

## Constructor Details

### AbstractRefreshableTargetSource

public AbstractRefreshableTargetSource()

## Method Details

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

### getTarget

@Nullable 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, or `null` if there is no actual target instance

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