Package org.springframework.aop.target

# Class AbstractPoolingTargetSource

java.lang.Object
org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource
org.springframework.aop.target.AbstractPrototypeBasedTargetSource
org.springframework.aop.target.AbstractPoolingTargetSource

All Implemented Interfaces:
  `Serializable`, `PoolingConfig`, `TargetClassAware`, `TargetSource`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.BeanFactoryAware`, `org.springframework.beans.factory.DisposableBean`

Direct Known Subclasses:
  `CommonsPool2TargetSource`

public abstract class AbstractPoolingTargetSource extends AbstractPrototypeBasedTargetSource implements PoolingConfig, org.springframework.beans.factory.DisposableBean
Abstract base class for pooling `TargetSource` implementations which maintain a pool of target instances, acquiring and releasing a target object from the pool for each method invocation. This abstract base class is independent of concrete pooling technology; see the subclass `CommonsPool2TargetSource` for a concrete example.

Subclasses must implement the `getTarget()` and `releaseTarget(java.lang.Object)` methods based on their chosen object pool. The `AbstractPrototypeBasedTargetSource.newPrototypeInstance()` method inherited from `AbstractPrototypeBasedTargetSource` can be used to create objects in order to put them into the pool.

Subclasses must also implement some monitoring methods from the `PoolingConfig` interface. The `getPoolingConfigMixin()` method makes these stats available on proxied objects through an IntroductionAdvisor.

This class implements the `DisposableBean` interface in order to force subclasses to implement a `DisposableBean.destroy()` method, closing down their object pool.

Author:
  Rod Johnson, Juergen Hoeller
See Also:
  - `getTarget()`
  - `releaseTarget(java.lang.Object)`
  - `DisposableBean.destroy()`
  - Serialized Form

## Field Summary

### Fields inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource

`logger, targetBeanName`

## Constructor Summary

Constructors
Constructor
Description
`AbstractPoolingTargetSource()`

## Method Summary

Modifier and Type
Method
Description
`protected abstract void`
`createPool()`
Create the pool.
`int`
`getMaxSize()`
Return the maximum size of the pool.
`DefaultIntroductionAdvisor`
`getPoolingConfigMixin()`
Return an IntroductionAdvisor that provides a mixin exposing statistics about the pool maintained by this object.
`abstract Object`
`getTarget()`
Acquire an object from the pool.
`abstract void`
`releaseTarget(Object target)`
Return the given object to the pool.
`final void`
`setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)`
Set the owning BeanFactory.
`void`
`setMaxSize(int maxSize)`
Set the maximum size of the pool.

### Methods inherited from class org.springframework.aop.target.AbstractPrototypeBasedTargetSource

`destroyPrototypeInstance, newPrototypeInstance, writeReplace`

### Methods inherited from class org.springframework.aop.target.AbstractBeanFactoryBasedTargetSource

`copyFrom, equals, getBeanFactory, getTargetBeanName, getTargetClass, hashCode, setTargetBeanName, setTargetClass, toString`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.beans.factory.DisposableBean

`destroy`

### Methods inherited from interface org.springframework.aop.target.PoolingConfig

`getActiveCount, getIdleCount`

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

`isStatic`

## Constructor Details

### AbstractPoolingTargetSource

public AbstractPoolingTargetSource()

## Method Details

### setMaxSize

public void setMaxSize(int maxSize)
Set the maximum size of the pool. Default is -1, indicating no size limit.

### getMaxSize

public int getMaxSize()
Return the maximum size of the pool.

Specified by:
  `getMaxSize` in interface `PoolingConfig`

### setBeanFactory

public final void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory) throws org.springframework.beans.BeansException
Description copied from class: `AbstractBeanFactoryBasedTargetSource`
Set the owning BeanFactory. We need to save a reference so that we can use the `getBean` method on every invocation.

Specified by:
  `setBeanFactory` in interface `org.springframework.beans.factory.BeanFactoryAware`
Overrides:
  `setBeanFactory` in class `AbstractPrototypeBasedTargetSource`
Throws:
  `org.springframework.beans.BeansException`

### createPool

protected abstract void createPool() throws Exception
Create the pool.

Throws:
  `Exception` - to avoid placing constraints on pooling APIs

### getTarget

@Nullable public abstract Object getTarget() throws Exception
Acquire an object from the pool.

Specified by:
  `getTarget` in interface `TargetSource`
Returns:
  an object from the pool
Throws:
  `Exception` - we may need to deal with checked exceptions from pool APIs, so we're forgiving with our exception signature

### releaseTarget

public abstract void releaseTarget(Object target) throws Exception
Return the given object to the pool.

Specified by:
  `releaseTarget` in interface `TargetSource`
Parameters:
  `target` - object that must have been acquired from the pool via a call to `getTarget()`
Throws:
  `Exception` - to allow pooling APIs to throw exception
See Also:
  - `getTarget()`

### getPoolingConfigMixin

public DefaultIntroductionAdvisor getPoolingConfigMixin()
Return an IntroductionAdvisor that provides a mixin exposing statistics about the pool maintained by this object.