package org.springframework.beans.factory.config;
import org.springframework.lang.Nullable;
/**
* 1.概述
* 定义单例bean的接口
* 2.子接口
* ConfigurableBeanFactory:
* 3.子实现类
* ConfigurableBeanFactory:
* DefaultSingletonBeanRegistry:
* 3.包含的方法:
* registerSingleton(String, Object):注册单例bean
* getSingleton(String):根据名称获取单例bean
* getSingletonNames():获取所有单例bean的名称
* getSingletonCount():获取单例bean的个数
* getSingletonMutex():获取互相引用的单例bean
* containSingleton(String):根据bean名称判断该单例bean是否存在
*/
public interface SingletonBeanRegistry {
/**
* 根据指定的bean名称和bean实例(应该是完全初始化的,且不接受任何销毁的回调方法)注册单例bean。
* 注册中心不会执行任何初始化回调(特别是,它不会调用initializegbean的afterPropertiesSet}方法)。
* @param beanName 自定义的bean的名称
* @param singletonObject 已存在的单例对象
*/
void registerSingleton(String beanName, Object singletonObject);
/**
* 根据bean名称返回一个bean实例对象(这个实例对象一定是初始化后的,而非一个未初始化的bean实例)
* 注意:此查找方法不知道FactoryBean前缀或别名。在获取singleton实例之前,需要首先解析规范bean名称。
* @param beanName 需要查找的bean的名称
* @return 注册的单例bean实例或者null
*/
@Nullable
Object getSingleton(String beanName);
/**
* 根据bean的名称判断bean工厂中是否包含bean已经被初始化的实例(未初始化的bean不会被检查)
* @param beanName 要查找的bean的名称
* @return true:bean工厂包含此单例bean; false:bean工厂不包含此单例bean
*/
boolean containsSingleton(String beanName);
/**
* 获取注册表中所有已实例化的单例bean的名称。
* @return 返回名称列表(从不为null)
*/
String[] getSingletonNames();
/**
* 获取注册表中所有注册的单例bean的总数。
* @return 单例bean的总数
*/
int getSingletonCount();
/**
* 返回此注册表互相引用的单例(对于外部协作者)。@返回互斥对象(never{@code null})
* @return 互斥的对象(不会为空)
*/
Object getSingletonMutex();
}