Package org.springframework.aop.framework.autoproxy.target

# Class AbstractBeanFactoryBasedTargetSourceCreator

java.lang.Object
org.springframework.aop.framework.autoproxy.target.AbstractBeanFactoryBasedTargetSourceCreator

All Implemented Interfaces:
  `TargetSourceCreator`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.BeanFactoryAware`, `org.springframework.beans.factory.DisposableBean`

Direct Known Subclasses:
  `LazyInitTargetSourceCreator`, `QuickTargetSourceCreator`

public abstract class AbstractBeanFactoryBasedTargetSourceCreator extends Object implements TargetSourceCreator, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.DisposableBean
Convenient superclass for `TargetSourceCreator` implementations that require creating multiple instances of a prototype bean.

Uses an internal BeanFactory to manage the target instances, copying the original bean definition to this internal factory. This is necessary because the original BeanFactory will just contain the proxy instance created through auto-proxying.

Requires running in an `AbstractBeanFactory`.

Author:
  Rod Johnson, Juergen Hoeller
See Also:
  - `AbstractBeanFactoryBasedTargetSource`
  - `AbstractBeanFactory`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final org.apache.commons.logging.Log`
`logger`

## Constructor Summary

Constructors
Constructor
Description
`AbstractBeanFactoryBasedTargetSourceCreator()`

## Method Summary

Modifier and Type
Method
Description
`protected org.springframework.beans.factory.support.DefaultListableBeanFactory`
`buildInternalBeanFactory(org.springframework.beans.factory.config.ConfigurableBeanFactory containingFactory)`
Build an internal BeanFactory for resolving target beans.
`protected abstract AbstractBeanFactoryBasedTargetSource`
`createBeanFactoryBasedTargetSource(Class<?> beanClass, String beanName)`
Subclasses must implement this method to return a new AbstractPrototypeBasedTargetSource if they wish to create a custom TargetSource for this bean, or `null` if they are not interested it in, in which case no special target source will be created.
`void`
`destroy()`
Destroys the internal BeanFactory on shutdown of the TargetSourceCreator.
`protected final org.springframework.beans.factory.BeanFactory`
`getBeanFactory()`
Return the BeanFactory that this TargetSourceCreators runs in.
`protected org.springframework.beans.factory.support.DefaultListableBeanFactory`
`getInternalBeanFactoryForBean(String beanName)`
Return the internal BeanFactory to be used for the specified bean.
`final TargetSource`
`getTargetSource(Class<?> beanClass, String beanName)`
Create a special TargetSource for the given bean, if any.
`protected boolean`
`isPrototypeBased()`
Return whether this TargetSourceCreator is prototype-based.
`final void`
`setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)`

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

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### logger

protected final org.apache.commons.logging.Log logger

## Constructor Details

### AbstractBeanFactoryBasedTargetSourceCreator

public AbstractBeanFactoryBasedTargetSourceCreator()

## Method Details

### setBeanFactory

public final void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)

Specified by:
  `setBeanFactory` in interface `org.springframework.beans.factory.BeanFactoryAware`

### getBeanFactory

@Nullable protected final org.springframework.beans.factory.BeanFactory getBeanFactory()
Return the BeanFactory that this TargetSourceCreators runs in.

### getTargetSource

@Nullable public final TargetSource getTargetSource(Class<?> beanClass, String beanName)
Description copied from interface: `TargetSourceCreator`
Create a special TargetSource for the given bean, if any.

Specified by:
  `getTargetSource` in interface `TargetSourceCreator`
Parameters:
  `beanClass` - the class of the bean to create a TargetSource for
  `beanName` - the name of the bean
Returns:
  a special TargetSource or `null` if this TargetSourceCreator isn't interested in the particular bean

### getInternalBeanFactoryForBean

protected org.springframework.beans.factory.support.DefaultListableBeanFactory getInternalBeanFactoryForBean(String beanName)
Return the internal BeanFactory to be used for the specified bean.

Parameters:
  `beanName` - the name of the target bean
Returns:
  the internal BeanFactory to be used

### buildInternalBeanFactory

protected org.springframework.beans.factory.support.DefaultListableBeanFactory buildInternalBeanFactory(org.springframework.beans.factory.config.ConfigurableBeanFactory containingFactory)
Build an internal BeanFactory for resolving target beans.

Parameters:
  `containingFactory` - the containing BeanFactory that originally defines the beans
Returns:
  an independent internal BeanFactory to hold copies of some target beans

### destroy

public void destroy()
Destroys the internal BeanFactory on shutdown of the TargetSourceCreator.

Specified by:
  `destroy` in interface `org.springframework.beans.factory.DisposableBean`
See Also:
  - `getInternalBeanFactoryForBean(java.lang.String)`

### isPrototypeBased

protected boolean isPrototypeBased()
Return whether this TargetSourceCreator is prototype-based. The scope of the target bean definition will be set accordingly.

Default is "true".

See Also:
  - `BeanDefinition.isSingleton()`

### createBeanFactoryBasedTargetSource

@Nullable protected abstract AbstractBeanFactoryBasedTargetSource createBeanFactoryBasedTargetSource(Class<?> beanClass, String beanName)
Subclasses must implement this method to return a new AbstractPrototypeBasedTargetSource if they wish to create a custom TargetSource for this bean, or `null` if they are not interested it in, in which case no special target source will be created. Subclasses should not call `setTargetBeanName` or `setBeanFactory` on the AbstractPrototypeBasedTargetSource: This class' implementation of `getTargetSource()` will do that.

Parameters:
  `beanClass` - the class of the bean to create a TargetSource for
  `beanName` - the name of the bean
Returns:
  the AbstractPrototypeBasedTargetSource, or `null` if we don't match this