版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31307269/article/details/80506827
DefaultSingletonBeanRegistry继承了SimpleAliasRegistry并且实现了SingletonBeanRegistry接口,那接下来就看看SingletonBeanRegistry接口的作用吧
/ * *
为共享bean实例定义登记处的接口。
可以通过@link org.springframework.beans.factory.beanfactory实现。
为了公开他们的单例管理工具
以一种统一的方式。
*
@link org.springframework.beans.factory.config.ConfigurableBeanFactory接口扩展了这个接口。
*
* @author Juergen hoel
* @since 2.0
* @see ConfigurableBeanFactory
* @see org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
* @see org.springframework.beans.factory.support.AbstractBeanFactory
* /
public interface SingletonBeanRegistry {
/ * *
在bean注册表中登记给定的现有对象,
在给定的bean名称下。
给定的实例应该被完全初始化;注册表
不会执行任何初始化回调(特别是,它不会执行
调用InitializingBean的@code afterproperties set方法)。
给定的实例不会接收任何破坏回调
(就像DisposableBean's {@code destroy} method方法一样)。
当在一个完整的BeanFactory中运行时:注册一个bean定义
如果您的bean应该接收,而不是现有的实例
初始化和/或破坏回调。
通常在注册表配置期间调用,但也可以使用
对于单例的运行时注册。因此,一个注册表
实现应该同步单例访问;这是必须的
无论如何,如果它支持BeanFactory对单例的延迟初始化。
@param beanName这个bean的名字
@param singletonObject现有的单例对象
* @see org.springframework.beans.factory.InitializingBean # afterPropertiesSet
* @see org.springframework.beans.factory.DisposableBean #摧毁
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry # registerBeanDefinition
* /
void registerSingleton(String beanName, Object singletonObject);
/ * *
返回在给定名称下注册的(raw)单件对象。
只是检查已经实例化的单件;不返回一个对象
对于尚未实例化的单件bean定义。
这个方法的主要目的是访问手动注册的单例
*(见{ @link # registerSingleton })。也可以用来访问单例对象
由一个已经被创建的bean定义定义,以一种原始的方式。
注意:这个查找方法不知道FactoryBean前缀或别名。
您需要在获得singleton实例之前首先解决规范的bean名称。
@param beanName要查找的bean的名称
如果没有找到注册的单例对象,或者@code null
* @see ConfigurableListableBeanFactory # getBeanDefinition
* /
Object getSingleton(String beanName);
/ * *
检查这个注册表是否包含有给定名称的单件实例。
只是检查已经实例化的单件;不返回@code true
对于尚未实例化的单件bean定义。
这个方法的主要目的是检查手动注册的单例
*(见{ @link # registerSingleton })。也可以用来检查a
由bean定义定义的单件已经创建。
要检查一个bean工厂是否包含一个给定名称的bean定义,
使用ListableBeanFactory的@code容器定义。叫两个
@code容器定义和@code包含单例答案
一个特定的bean工厂是否包含一个带有给定名称的本地bean实例。
使用BeanFactory的@code容器来进行一般检查
工厂知道一个有给定名称的bean(是否手工注册的单件
实例或由bean定义创建),也检查祖先工厂。
注意:这个查找方法不知道FactoryBean前缀或别名。
在检查单件状态之前,您需要先解决规范的bean名称。
@param beanName要查找的bean的名称
如果这个bean工厂包含一个带有给定名称的单例实例
* @see # registerSingleton
* @see org.springframework.beans.factory.ListableBeanFactory # containsBeanDefinition
* @see org.springframework.beans.factory.BeanFactory # containsBean
* /
boolean containsSingleton(String beanName);
/ * *
返回登记在该注册表中的单体bean的名称。
只是检查已经实例化的单件;不返回名称
对于尚未实例化的单件bean定义。
这个方法的主要目的是检查手动注册的单例
*(见{ @link # registerSingleton })。也可以用来检查哪些单例
由bean定义定义的已经创建。
将姓名列表作为字符串数组(从不@code null)返回
* @see # registerSingleton
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry # getBeanDefinitionNames
* @see org.springframework.beans.factory.ListableBeanFactory # getBeanDefinitionNames
* /
String[] getSingletonNames();
/ * *
返回注册在该注册表中的单体bean的数量。
只是检查已经实例化的单件;不计数
单例bean定义尚未实例化。
这个方法的主要目的是检查手动注册的单例
*(见{ @link # registerSingleton })。也可以用来计算
由已经创建的bean定义定义的单例。
@return单体bean的数量
* @see # registerSingleton
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry # getBeanDefinitionCount
* @see org.springframework.beans.factory.ListableBeanFactory # getBeanDefinitionCount
* /
int getSingletonCount();
}
SingletonBeanRegistry此接口是为了统一单例bean的管理的接口
DefaultSingletonBeanRegistry继承了SimpleAliasRegistry并且实现了SingletonBeanRegistry接口,那么DefaultSingletonBeanRegistry就拥有了 单例bean的注册和 别名的功能