org.springframework.beans.factory.support
Class FactoryBeanRegistrySupport

java.lang.Object
  extended by org.springframework.core.SimpleAliasRegistry
      extended by org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
          extended by 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
private  java.util.Map<java.lang.String,java.lang.Object> factoryBeanObjectCache
          Cache of singleton objects created by FactoryBeans: FactoryBean name --> object
 
Fields inherited from class org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
logger, NULL_OBJECT
 
Constructor Summary
FactoryBeanRegistrySupport()
           
 
Method Summary
private  java.lang.Object doGetObjectFromFactoryBean(FactoryBean factory, java.lang.String beanName, boolean shouldPostProcess)
          Obtain an object to expose from the given FactoryBean.
protected  java.security.AccessControlContext getAccessControlContext()
          Returns the security context for this bean factory.
protected  java.lang.Object getCachedObjectForFactoryBean(java.lang.String beanName)
          Obtain an object to expose from the given FactoryBean, if available in cached form.
protected  FactoryBean getFactoryBean(java.lang.String beanName, java.lang.Object beanInstance)
          Get a FactoryBean for the given bean if possible.
protected  java.lang.Object getObjectFromFactoryBean(FactoryBean factory, java.lang.String beanName, boolean shouldPostProcess)
          Obtain an object to expose from the given FactoryBean.
protected  java.lang.Class getTypeForFactoryBean(FactoryBean factoryBean)
          Determine the type for the given FactoryBean.
protected  java.lang.Object postProcessObjectFromFactoryBean(java.lang.Object object, java.lang.String beanName)
          Post-process the given object that has been obtained from the FactoryBean.
protected  void removeSingleton(java.lang.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
 

Field Detail

factoryBeanObjectCache

private final java.util.Map<java.lang.String,java.lang.Object> factoryBeanObjectCache
Cache of singleton objects created by FactoryBeans: FactoryBean name --> object

Constructor Detail

FactoryBeanRegistrySupport

public FactoryBeanRegistrySupport()
Method Detail

getTypeForFactoryBean

protected java.lang.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 java.lang.Object getCachedObjectForFactoryBean(java.lang.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 java.lang.Object getObjectFromFactoryBean(FactoryBean factory,
                                                    java.lang.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()

doGetObjectFromFactoryBean

private java.lang.Object doGetObjectFromFactoryBean(FactoryBean factory,
                                                    java.lang.String beanName,
                                                    boolean shouldPostProcess)
                                             throws BeanCreationException
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 java.lang.Object postProcessObjectFromFactoryBean(java.lang.Object object,
                                                            java.lang.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(java.lang.String beanName,
                                     java.lang.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(java.lang.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 java.security.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()