/** * 以接口的方式,定義註冊表共享bean實例。能夠被org.springframework.beans.factory.BeanFactory實現類實現,用統一的方式暴露它們的單例。 */ public interface SingletonBeanRegistry { /** * 基於給定的bean名稱,在bean註冊表中註冊給定的存在的對象做爲單例。 * 給定的實例應該徹底初始化,註冊表不會執行任何初始化回調(特別地,不會調用InitializingBean的afterPropertiesSet的方法)。給定的實例不會接收任何破壞回調(像DisposableBean的destroy方法)。 * 在完整的BeanFactory中運行時:若是bean應該接收初始化和/或銷燬回調,則註冊bean定義而不是現有實例。 * 一般在註冊表配置期間調用,但也可用於單例的運行時註冊。 所以,註冊表實現應該同步單例訪問; 若是它支持BeanFactory對單例的延遲初始化,它將不管如何都必須這樣作。 * @param beanName 實例名稱 * @param singletonObject 存在的單例對象 */ void registerSingleton(String beanName, Object singletonObject); /** * 返回在給定名稱下注冊的(原始)單例對象。 * 只檢查已經實例化的單例;可是不返回沒有實例化的單例bean對象。 * 這個方法的主要目的是去訪問手動註冊的單例。 * 也能夠用來以原始方式訪問已經建立的bean定義定義的單例。注意:此查找方法不知道FactoryBean前綴或別名。在獲取單例以前,須要首先解析規範bean名稱實例。 * @param beanName 查找的bean的名稱 * @return 返回註冊的單例對象,或者Null。 * @return the registered singleton object, or {@code null} if none found */ @Nullable Object getSingleton(String beanName); /** * 檢查註冊表中是否包含給定名稱的單例實例。 * 只檢查已經實例化的單例,對沒有實例化的單例bean定義不返回true。 * 這個方法的主要目的是去檢查手動註冊的單例。 * 也能夠用來檢查一個單例是否由已經建立的bean定義所定義的。 * 調用ListableBeanFactory的containsBeanDefinition方法檢查一個bean工廠是否包含給定名字的bean定義。調用containsBeanDefinition和containsSingleton回答一個指定的bean工廠是否包括給定名稱的本地bean實例。 * 使用BeanFactory的containsBean進行常規檢查,bean工廠是否知道具備給定名稱的Bean(不管是手動註冊的單例bean或是由bean定義建立的)。也檢查祖先工廠。 * 注意:此查找方法不知道FactoryBean前綴或別名。在檢查單例狀態以前,您須要首先解析規範bean名稱。 * @param beanName 查找的bean的名稱 * @return 返回bean工廠是否包含給定名稱的單例實例。 */ boolean containsSingleton(String beanName); /** * 返回在此註冊表中註冊的單例bean的名稱。僅檢查已實例化的單例; 不返回還沒有實例化的單例bean定義的名稱。此方法的主要目的是檢查手動註冊的單例。也能夠被用來檢查由已經建立的bean定義所定義的單例。 * @return 返回名字集合做爲字符串數組 */ String[] getSingletonNames(); /** * 返回在此註冊表中註冊的單例bean的數量。僅檢查已實例化的單例;不計算還沒有實例化的單例bean定義。此方法的主要目的是檢查手動註冊的單例。也能夠被用來計算由已經建立的bean定義所定義的單例的數量。 * @return 返回單例bean的數量 */ int getSingletonCount(); /** * 返回此註冊表使用的單例互斥鎖(適用於外部協做者)。 * @return 返回互斥對象,不返回Null。 * @since 4.2 */ Object getSingletonMutex(); }