单例Bean注册表接口SingletonBeanRegistry
Github:
SingletonBeanRegistry.java
SingletonBeanRegistry
package org.springframework.beans.factory.config;
import org.springframework.lang.Nullable;
/**
* 为共享Bean实例(shared bean instances)定义注册表(define a registry)的接口
* Can be implemented by {@link org.springframework.beans.factory.BeanFactory}
* implementations ,以便用一种统一的方式来公开他们的单例管理设施(expose their singleton management facility)
*
* <p>The {@link ConfigurableBeanFactory} interface extends this interface.
*
* @author Juergen Hoeller
* @since 2.0
* @see ConfigurableBeanFactory
* @see org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
* @see org.springframework.beans.factory.support.AbstractBeanFactory
*/
public interface SingletonBeanRegistry {
/**
* 在给定的bean名称下,在bean注册表中将给定的现有对象注册为singleton.
* <p>他给出的实例应该被完全初始化;
* 注册表不会执行任何初始化回调(特别是,它不会调用InitializingBean的{@code afterPropertiesSet}方法)
* 给定的实例不会收到任何销毁回调
*(比如,DisposableBean's {@code destroy} 方法)
* <p>在完整的BeanFactory运行时:
* <b>如果你的bean应该接收initialization或者destruction回调,
* 注册bean定义而不是一个现有的实例</b>
* <p>通常在注册表配置期间调用,
* 但也可以用于单例的运行时注册
* 因此,注册表实现应该同步单例访问
* 如果它支持BeanFactory对单例的懒惰初始化,
* 它将无论如何都必须这样做
*
* @param beanName the name of the bean
* @param singletonObject the existing singleton object
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet
* @see org.springframework.beans.factory.DisposableBean#destroy
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry#registerBeanDefinition
*/
void registerSingleton(String beanName, Object singletonObject);
/**
* 返回在给定名称下注册的(原始)单例对象
* <p>只检查已经实例化的单例;
* 没有为 尚未实例化的单例bean定义 返回一个对象.
* <p>此方法的主要目的是访问手动注册的单例
* (see {@link #registerSingleton}).
* 也可以用于以原始的方式 访问已经创建的bean定义的单例 * <p><b>NOTE:</b> 此查找方法不知道FactoryBean的前缀或别名.
* 在获取实例之前,需要首先解析规范bean名称
*
* @param beanName the name of the bean to look for
* @return the registered singleton object, or {@code null} if none found
* @see ConfigurableListableBeanFactory#getBeanDefinition
*/
@Nullable
Object getSingleton(String beanName);
/**
* 检查此注册表是否包含具有特定名称的单例实例
* <p>仅检查已经实例化的单例; does not return {@code true}
* 对于尚未初始化的单例bean定义,不返回{@code true}.
* <p>此方法的主要目的是检查手动注册的单例
* (see {@link #registerSingleton}).
* 也可以用来检查一下已经创建了由bean定义的单例
* <p>要检查bean工厂是否包含具有给定名称的bean定义,
* 使用 ListableBeanFactory's {@code containsBeanDefinition}. 同时调用
* {@code containsBeanDefinition} and {@code containsSingleton}
* 就可以回答一个特定的bean工厂是否包含
* 具有给定名称的本地bean实例
* <p>使用 BeanFactory's {@code containsBean} 来大体上检查工厂是否知道具有给定名称的bean
* (无论是手动注册的单例实例还是bean定义创建的),
* 也检查祖先工厂.
* <p><b>NOTE:</b> T此查找方法不知道FactoryBean前缀或别名.
* 在检查单例状态之前,您需要先解析规范bean名称.
*
* @param beanName the name of the bean to look for
* @return if this bean factory contains a singleton instance with the given name
* @see #registerSingleton
* @see org.springframework.beans.factory.ListableBeanFactory#containsBeanDefinition
* @see org.springframework.beans.factory.BeanFactory#containsBean
*/
boolean containsSingleton(String beanName);
/**
* 返回在此注册表中注册的单例bean的名称
* <p>只检查已经实例化的单例;不返回尚未实例化的单例bean定义的名称
* <p>此方法的主要目的是检查手动注册的单例(请参阅{@link #registerSingleton})。
* 也可以用于检查已经创建了bean定义的单例。
*
* @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();
/**
* 返回在此注册表中的注册的单例bean的数量
* <p>只检查已经实例化的单例; 不计算尚未实例化的单例bean定义
* <p>此方法的主要目的是检查手动注册的单例实例
* (see {@link #registerSingleton}).
* 也可以用于计算已经创建的bean定义的单例数
*
* @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 mutex object (never {@code null})
* @since 4.2
*/
Object getSingletonMutex();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix