org.springframework.beans.factory.support

## Class FactoryBeanRegistrySupport

- java.lang.Object
- - org.springframework.core.SimpleAliasRegistry
  - - org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
    - - org.springframework.beans.factory.support.FactoryBeanRegistrySupport

All Implemented Interfaces:
  SingletonBeanRegistry, AliasRegistry

Direct Known Subclasses:
  AbstractBeanFactory

    public abstract class FactoryBeanRegistrySupport
    extends DefaultSingletonBeanRegistry

Support base class for singleton registries which need to handle `FactoryBean` instances, integrated with `DefaultSingletonBeanRegistry`'s singleton management.

Serves as base class for `AbstractBeanFactory`.

Since:
  2.5.1
Author:
  Juergen Hoeller

### Field Summary

### Fields inherited from class org.springframework.beans.factory.support.DefaultSingletonBeanRegistry

`logger, NULL_OBJECT`

### Constructor Summary

Constructors
Constructor and Description
`FactoryBeanRegistrySupport()`

### Method Summary

Methods
`protected AccessControlContext` `getAccessControlContext()` Returns the security context for this bean factory.
`protected Object` `getCachedObjectForFactoryBean(String beanName)` Obtain an object to expose from the given FactoryBean, if available in cached form.
`protected FactoryBean` `getFactoryBean(String beanName, Object beanInstance)` Get a FactoryBean for the given bean if possible.
`protected Object` `getObjectFromFactoryBean(FactoryBean factory, String beanName, boolean shouldPostProcess)` Obtain an object to expose from the given FactoryBean.
`protected Class` `getTypeForFactoryBean(FactoryBean factoryBean)` Determine the type for the given FactoryBean.
`protected Object` `postProcessObjectFromFactoryBean(Object object, String beanName)` Post-process the given object that has been obtained from the FactoryBean.
`protected void` `removeSingleton(String beanName)` Overridden to clear the FactoryBean object cache as well.

### Methods inherited from class org.springframework.beans.factory.support.DefaultSingletonBeanRegistry

`addSingleton, addSingletonFactory, afterSingletonCreation, beforeSingletonCreation, containsSingleton, destroyBean, destroySingleton, destroySingletons, getDependenciesForBean, getDependentBeans, getSingleton, getSingleton, getSingleton, getSingletonCount, getSingletonMutex, getSingletonNames, hasDependentBean, isActuallyInCreation, isCurrentlyInCreation, isSingletonCurrentlyInCreation, onSuppressedException, registerContainedBean, registerDependentBean, registerDisposableBean, registerSingleton, setCurrentlyInCreation`

### Methods inherited from class org.springframework.core.SimpleAliasRegistry

`allowAliasOverriding, canonicalName, checkForAliasCircle, getAliases, isAlias, registerAlias, removeAlias, resolveAliases`

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

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

### Constructor Detail

#### FactoryBeanRegistrySupport

    public FactoryBeanRegistrySupport()

### Method Detail

#### getTypeForFactoryBean

    protected Class getTypeForFactoryBean(FactoryBean factoryBean)

Determine the type for the given FactoryBean.

Parameters:
  `factoryBean` - the FactoryBean instance to check
Returns:
  the FactoryBean's object type, or `null` if the type cannot be determined yet

#### getCachedObjectForFactoryBean

    protected Object getCachedObjectForFactoryBean(String beanName)

Obtain an object to expose from the given FactoryBean, if available in cached form. Quick check for minimal synchronization.

Parameters:
  `beanName` - the name of the bean
Returns:
  the object obtained from the FactoryBean, or `null` if not available

#### getObjectFromFactoryBean

    protected Object getObjectFromFactoryBean(FactoryBean factory,
                                  String beanName,
                                  boolean shouldPostProcess)

Obtain an object to expose from the given FactoryBean.

Parameters:
  `factory` - the FactoryBean instance
  `beanName` - the name of the bean
  `shouldPostProcess` - whether the bean is subject for post-processing
Returns:
  the object obtained from the FactoryBean
Throws:
  `BeanCreationException` - if FactoryBean object creation failed
See Also:
  `FactoryBean.getObject()`

#### postProcessObjectFromFactoryBean

    protected Object postProcessObjectFromFactoryBean(Object object,
                                          String beanName)
                                               throws BeansException

Post-process the given object that has been obtained from the FactoryBean. The resulting object will get exposed for bean references.

The default implementation simply returns the given object as-is. Subclasses may override this, for example, to apply post-processors.

Parameters:
  `object` - the object obtained from the FactoryBean.
  `beanName` - the name of the bean
Returns:
  the object to expose
Throws:
  `BeansException` - if any post-processing failed

#### getFactoryBean

    protected FactoryBean getFactoryBean(String beanName,
                             Object beanInstance)
                                  throws BeansException

Get a FactoryBean for the given bean if possible.

Parameters:
  `beanName` - the name of the bean
  `beanInstance` - the corresponding bean instance
Returns:
  the bean instance as FactoryBean
Throws:
  `BeansException` - if the given bean cannot be exposed as a FactoryBean

#### removeSingleton

    protected void removeSingleton(String beanName)

Overridden to clear the FactoryBean object cache as well.

Overrides:
  `removeSingleton` in class `DefaultSingletonBeanRegistry`
Parameters:
  `beanName` - the name of the bean
See Also:
  `DefaultSingletonBeanRegistry.getSingletonMutex()`

#### getAccessControlContext

    protected AccessControlContext getAccessControlContext()

Returns the security context for this bean factory. If a security manager is set, interaction with the user code will be executed using the privileged of the security context returned by this method.

See Also:
  `AccessController.getContext()`