這個接口提供了DefaultListableBeanFactory的許多功能,本節主要分析這個接口提供的功能,實現後面在分析,先看其接口加強體系。spring
能夠看到這裏除了繼承咱們第二節中提到的三大工廠接口外,還繼承了一個單例註冊接口和可配置的工廠接口,咱們接下來先看看這倆個接口提供了什麼功能緩存
這個接口正如其名,提供單例的管理功能,包括註冊,獲取等功能安全
public interface SingletonBeanRegistry { //註冊單例 void registerSingleton(String beanName, Object singletonObject); //獲取單例 @Nullable Object getSingleton(String beanName); //校驗是否存在單例 boolean containsSingleton(String beanName); //獲取全部單例名 String[] getSingletonNames(); //獲取全部單例的數目 int getSingletonCount(); //返回一個單例互斥對象 Object getSingletonMutex();
這個接口就是加強bean工廠的可配置能力,具體看註釋編輯器
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry { //範圍標識符,能夠調用registerScope方法增長 String SCOPE_SINGLETON = "singleton"; String SCOPE_PROTOTYPE = "prototype"; //設置父工廠 void setParentBeanFactory(BeanFactory parentBeanFactory) throws IllegalStateException; //設置和獲取bean的類加載器 void setBeanClassLoader(@Nullable ClassLoader beanClassLoader); @Nullable ClassLoader getBeanClassLoader(); //設置和獲取一個臨時類加載器 void setTempClassLoader(@Nullable ClassLoader tempClassLoader); @Nullable ClassLoader getTempClassLoader(); //設置和獲取是否緩存bean的元數據 void setCacheBeanMetadata(boolean cacheBeanMetadata); boolean isCacheBeanMetadata(); //設置和獲取bean定義的解析策略 void setBeanExpressionResolver(@Nullable BeanExpressionResolver resolver); @Nullable BeanExpressionResolver getBeanExpressionResolver(); //spring 3.0提供的新功能 設置和獲取轉換服務處理屬性值,能夠做爲屬性編輯器的一個替代 void setConversionService(@Nullable ConversionService conversionService); @Nullable ConversionService getConversionService(); //增長一個自定義屬性處理器工廠,這個方法避免了同步,推薦使用 void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar); //註冊一個自定義屬性處理器來處理指定類型的屬性,注意這個自定義屬性處理器是共用的,所以須要使用同步關鍵字保證線程安全,爲了不同步可使用addPropertyEditorRegistrar方法 void registerCustomEditor(Class<?> requiredType, Class<? extends PropertyEditor> propertyEditorClass); //用已經註冊的屬性處理器初始化屬性處理器工廠 void copyRegisteredEditorsTo(PropertyEditorRegistry registry); //設置一個類型轉化器處理屬性值,這會重寫默認的屬性處理器機制 void setTypeConverter(TypeConverter typeConverter); //獲取類型轉換器,這個一般不是線程安全的,若是默認的屬性處理器機制被激活,通常返回的這個類型轉換器會喚醒全部已經註冊的屬性處理器 TypeConverter getTypeConverter(); //增長一個string解析器來處理內嵌值,好比註解屬性 void addEmbeddedValueResolver(StringValueResolver valueResolver); boolean hasEmbeddedValueResolver(); @Nullable String resolveEmbeddedValue(String value); //增長一個bean後置處理器,在bean建立時將以它們註冊時候的順序調用 void addBeanPostProcessor(BeanPostProcessor beanPostProcessor); int getBeanPostProcessorCount(); //註冊範圍,還記得默認的單例和原型範圍嗎? void registerScope(String scopeName, Scope scope); String[] getRegisteredScopeNames(); @Nullable Scope getRegisteredScope(String scopeName); //提供一個安全訪問上下文 AccessControlContext getAccessControlContext(); //從其餘bean工廠 copy配置來初始化本身 void copyConfigurationFrom(ConfigurableBeanFactory otherFactory); //註冊別名,能夠運行時調用,所以須要同步 void registerAlias(String beanName, String alias) throws BeanDefinitionStoreException; //使用指定的string解析器處理別名 void resolveAliases(StringValueResolver valueResolver); //合併bean定義,由於咱們是父子工廠,因此必要的時候須要合併 BeanDefinition getMergedBeanDefinition(String beanName) throws NoSuchBeanDefinitionException; //校驗是不是個工廠bean boolean isFactoryBean(String name) throws NoSuchBeanDefinitionException; //設置bean正在建立的狀態,只限於容器內部使用 void setCurrentlyInCreation(String beanName, boolean inCreation); boolean isCurrentlyInCreation(String beanName); //註冊依賴的bean void registerDependentBean(String beanName, String dependentBeanName); //獲取依賴指定bean的全部bean String[] getDependentBeans(String beanName); //獲取指定bean的全部依賴bean,注意與上面的區別 String[] getDependenciesForBean(String beanName); //銷燬給定的bean,一般是原型bean void destroyBean(String beanName, Object beanInstance); void destroyScopedBean(String beanName); //銷燬全部的單例,通常是容器關閉時調用 void destroySingletons(); }