|
The Spring Framework | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
public class DefaultSingletonBeanRegistry
Generic registry for shared bean instances, implementing the
SingletonBeanRegistry
.
Allows for registering singleton instances that should be shared
for all callers of the registry, to be obtained via bean name.
Also supports registration of
DisposableBean
instances,
(which might or might not correspond to registered singletons),
to be destroyed on shutdown of the registry. Dependencies between
beans can be registered to enforce an appropriate shutdown order.
This class mainly serves as base class for
BeanFactory
implementations,
factoring out the common management of singleton bean instances. Note that
the ConfigurableBeanFactory
interface extends the SingletonBeanRegistry
interface.
Note that this class assumes neither a bean definition concept
nor a specific creation process for bean instances, in contrast to
AbstractBeanFactory
and DefaultListableBeanFactory
(which inherit from it). Can alternatively also be used as a nested
helper to delegate to.
registerSingleton(java.lang.String, java.lang.Object)
,
registerDisposableBean(java.lang.String, org.springframework.beans.factory.DisposableBean)
,
DisposableBean
,
ConfigurableBeanFactory
Field Summary | |
---|---|
protected Log |
logger
Logger available to subclasses |
Constructor Summary | |
---|---|
DefaultSingletonBeanRegistry()
|
Method Summary | |
---|---|
protected void |
addSingleton(String beanName,
Object singletonObject)
Add the given singleton object to the singleton cache of this factory. |
protected void |
afterSingletonCreation(String beanName)
Callback after singleton creation. |
protected void |
beforeSingletonCreation(String beanName)
Callback before singleton creation. |
boolean |
containsSingleton(String beanName)
Check if this registry contains a singleton instance with the given name. |
protected void |
destroyBean(String beanName,
DisposableBean bean)
Destroy the given bean. |
void |
destroySingleton(String beanName)
Destroy the given bean. |
void |
destroySingletons()
|
protected Set |
getDependentBeans(String beanName)
Return whether a dependent bean has been registered under the given name. |
Object |
getSingleton(String beanName)
Return the (raw) singleton object registered under the given name. |
Object |
getSingleton(String beanName,
ObjectFactory singletonFactory)
Return the (raw) singleton object registered under the given name, creating and registering a new one if none registered yet. |
int |
getSingletonCount()
Return the number of singleton beans registered in this registry. |
protected Object |
getSingletonMutex()
Expose the singleton mutex to subclasses. |
String[] |
getSingletonNames()
Return the names of singleton beans registered in this registry. |
protected boolean |
hasDependentBean(String beanName)
Return whether a dependent bean has been registered under the given name. |
boolean |
isSingletonCurrentlyInCreation(String beanName)
Return whether the specified singleton bean is currently in creation (within the entire factory). |
void |
registerDependentBean(String beanName,
String dependentBeanName)
Register a dependent bean for the given bean, to be destroyed before the given bean is destroyed. |
void |
registerDisposableBean(String beanName,
DisposableBean bean)
Add the given bean to the list of disposable beans in this registry. |
void |
registerSingleton(String beanName,
Object singletonObject)
Register the given existing object as singleton in the bean registry, under the given bean name. |
protected void |
removeSingleton(String beanName)
Remove the bean with the given name from the singleton cache of this factory. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Log logger
Constructor Detail |
---|
public DefaultSingletonBeanRegistry()
Method Detail |
---|
public void registerSingleton(String beanName, Object singletonObject) throws IllegalStateException
SingletonBeanRegistry
The given instance is supposed to be fully initialized; the registry
will not perform any initialization callbacks (in particular, it won't
call InitializingBean's afterPropertiesSet
method).
The given instance will not receive any destruction callbacks
(like DisposableBean's destroy
method) either.
If running within a full BeanFactory: Register a bean definition instead of an existing instance if your bean is supposed to receive initialization and/or destruction callbacks.
Typically invoked during registry configuration, but can also be used for runtime registration of singletons. As a consequence, a registry implementation should synchronize singleton access; it will have to do this anyway if it supports a BeanFactory's lazy initialization of singletons.
registerSingleton
in interface SingletonBeanRegistry
beanName
- the name of the beansingletonObject
- the existing singleton object
IllegalStateException
InitializingBean.afterPropertiesSet()
,
DisposableBean.destroy()
,
BeanDefinitionRegistry.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)
protected void addSingleton(String beanName, Object singletonObject)
To be called for eager registration of singletons, e.g. to be able to resolve circular references.
beanName
- the name of the beansingletonObject
- the singleton objectpublic Object getSingleton(String beanName)
SingletonBeanRegistry
Only checks already instantiated singletons; does not return an Object for singleton bean definitions which have not been instantiated yet.
The main purpose of this method is to access manually registered singletons
(see SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
). Can also be used to access a singleton
defined by a bean definition that already been created, in a raw fashion.
getSingleton
in interface SingletonBeanRegistry
beanName
- the name of the bean to look for
null
if none foundConfigurableListableBeanFactory.getBeanDefinition(java.lang.String)
public Object getSingleton(String beanName, ObjectFactory singletonFactory)
beanName
- the name of the beansingletonFactory
- the ObjectFactory to lazily create the singleton
with, if necessary
protected void removeSingleton(String beanName)
To be able to clean up eager registration of a singleton if creation failed.
beanName
- the name of the beanpublic boolean containsSingleton(String beanName)
SingletonBeanRegistry
Only checks already instantiated singletons; does not return true
for singleton bean definitions which have not been instantiated yet.
The main purpose of this method is to check manually registered singletons
(see SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
). Can also be used to check whether a
singleton defined by a bean definition has already been created.
To check whether a bean factory contains a bean definition with a given name,
use ListableBeanFactory's containsBeanDefinition
. Calling both
containsBeanDefinition
and containsSingleton
answers
whether a specific bean factory contains an own bean with the given name.
Use BeanFactory's containsBean
for general checks whether the
factory knows about a bean with a given name (whether manually registered singleton
instance or created by bean definition), also checking ancestor factories.
containsSingleton
in interface SingletonBeanRegistry
beanName
- the name of the bean to look for
SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
,
ListableBeanFactory.containsBeanDefinition(java.lang.String)
,
BeanFactory.containsBean(java.lang.String)
public String[] getSingletonNames()
SingletonBeanRegistry
Only checks already instantiated singletons; does not return names for singleton bean definitions which have not been instantiated yet.
The main purpose of this method is to check manually registered singletons
(see SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
). Can also be used to check which
singletons defined by a bean definition have already been created.
getSingletonNames
in interface SingletonBeanRegistry
null
)SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
,
BeanDefinitionRegistry.getBeanDefinitionNames()
,
ListableBeanFactory.getBeanDefinitionNames()
public int getSingletonCount()
SingletonBeanRegistry
Only checks already instantiated singletons; does not count singleton bean definitions which have not been instantiated yet.
The main purpose of this method is to check manually registered singletons
(see SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
). Can also be used to count the number of
singletons defined by a bean definition that have already been created.
getSingletonCount
in interface SingletonBeanRegistry
SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
,
BeanDefinitionRegistry.getBeanDefinitionCount()
,
ListableBeanFactory.getBeanDefinitionCount()
protected void beforeSingletonCreation(String beanName)
Default implementation register the singleton as currently in creation.
beanName
- the name of the singleton about to be createdisSingletonCurrentlyInCreation(java.lang.String)
protected void afterSingletonCreation(String beanName)
Default implementation marks the singleton as not in creation anymore.
beanName
- the name of the singleton that has been createdisSingletonCurrentlyInCreation(java.lang.String)
public final boolean isSingletonCurrentlyInCreation(String beanName)
beanName
- the name of the beanpublic void registerDisposableBean(String beanName, DisposableBean bean)
beanName
- the name of the beanbean
- the bean instancepublic void registerDependentBean(String beanName, String dependentBeanName)
beanName
- the name of the beandependentBeanName
- the name of the dependent beanprotected boolean hasDependentBean(String beanName)
beanName
- the name of the beanprotected Set getDependentBeans(String beanName)
beanName
- the name of the bean
public void destroySingletons()
public void destroySingleton(String beanName)
destroyBean
if a corresponding disposable bean instance is found.
beanName
- the name of the beandestroyBean(java.lang.String, org.springframework.beans.factory.DisposableBean)
protected void destroyBean(String beanName, DisposableBean bean)
beanName
- the name of the beanbean
- the bean instance to destroyprotected final Object getSingletonMutex()
Subclasses should synchronize on the given Object if they perform any sort of extended singleton creation phase. In particular, subclasses should not have their own mutexes involved in singleton creation, to avoid the potential for deadlocks in lazy-init situations.
|
The Spring Framework | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |