## 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
`FactoryBeanRegistrySupport()`

Method Summary
`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, 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()`