此接口是针对Spring中的单例Bean设计的。提供了统一访问单例Bean的功能,BeanFactory可实现此接口以提供访问内部单例Bean的能力
public interface SingletonBeanRegistry {
/**
* 以指定的名字将给定Object注册到BeanFactory中。
* 给定的Object必须是被完全初始化了的,此注册接口不会提供任何用以初始化的回调函数,需要特意提及的
* 一点是InitializingBean的afterPropertiesSet方法也不会被此注册接口调用,并且,指定实例
* 也不会收到destroy的信息.
* 如果此接口的实现类是一个BeanFactory,最好将你的类注册成Bean Definition而不是直接使用对象
* 注册,前一种注册方式的好处在于,它可以使你定义的Bean收到initialization和destruction回调。
* 此方法通常在配置和注册Bean期间调用,但是也不排斥在运行时动态的向其中注册单例对象。因此实现类
* 应该同步代码对单例Bean的访问方法
*/
void registerSingleton(String beanName, Object singletonObject);
/**
* 以Object的形式返回指定名字的Bean。仅仅返回已经初始化完成的Bean,对于还没有初始化的
* Bean Definition不予以考虑
* 此方法的主要目的是提供一种手动获取已注册单例Bean的方式,同样的对于通过Bean Definition注册的
* Bean也可以通过此方式获得
* 但是要注意,此方法并不支持使用别名对Bean进行查找,如果只有别名的话,要先通过BeanFactory的接口
* 获取到Bean对应的全限定名称
*/
Object getSingleton(String beanName);
/**
* Check if this registry contains a singleton instance with the given name.
* 检查此实例是否包含指定名字的并且!!!已经初始化完成的单例Bean。
* 此方法的主要目标是提供一种手动检测Bean是否初始化完成的手段。也可用于检测通过BeanDefinition
* 定义的Bean是否创建完成。
* 如果要检测BeanFactory中是否包含指定name的BeanDefinition(不管是否初始化完毕),可使用BeanFactory
* 的containsBeanDefinition。同时判断containsBeanDefinition和本方法,可以判断BeanFactory是否包含
* 已经初始化完毕的Bean
* 而BeanFactory的containsBean方法是用于通用检测一个BeanFactory或者其父上下文是否有
* 一个指定名字的Bean的手段。
* 不支持别名查找
*/
boolean containsSingleton(String beanName);
/**
* Return the names of singleton beans registered in this registry.
* <p>Only checks already instantiated singletons; does not return names
* for singleton bean definitions which have not been instantiated yet.
* <p>The main purpose of this method is to check manually registered singletons
* (see {@link #registerSingleton}). Can also be used to check which singletons
* defined by a bean definition have already been created.
* @return the list of names as a String array (never {@code null})
* @see #registerSingleton
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry#getBeanDefinitionNames
* @see org.springframework.beans.factory.ListableBeanFactory#getBeanDefinitionNames
*/
String[] getSingletonNames();
/**
* Return the number of singleton beans registered in this registry.
* <p>Only checks already instantiated singletons; does not count
* singleton bean definitions which have not been instantiated yet.
* <p>The main purpose of this method is to check manually registered singletons
* (see {@link #registerSingleton}). Can also be used to count the number of
* singletons defined by a bean definition that have already been created.
* @return the number of singleton beans
* @see #registerSingleton
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry#getBeanDefinitionCount
* @see org.springframework.beans.factory.ListableBeanFactory#getBeanDefinitionCount
*/
int getSingletonCount();
/**
* Return the singleton mutex used by this registry (for external collaborators).
* @return the mutex object (never {@code null})
* @since 4.2
*/
Object getSingletonMutex();
}