ConfigurableBeanFactory繼承了HierarchicalBeanFactory, SingletonBeanRegistry兩個接口。這個接口將被大多數bean工廠實現。segmentfault
這個方法,比以前的都多,沒有截全。
緩存
String SCOPE_SINGLETON = "singleton";//單例 String SCOPE_PROTOTYPE = "prototype";//多例
設置父類容器安全
void setParentBeanFactory(BeanFactory parentBeanFactory) throws IllegalStateException;
類加載器編輯器
// 設置類加載器 void setBeanClassLoader(@Nullable ClassLoader beanClassLoader); // 獲取類加載器 ClassLoader getBeanClassLoader(); // 設置臨時加載器,若是涉及到加載時編織,一般只指定一個臨時類裝入器,以確保實際的bean類被儘量延遲地裝入 void setTempClassLoader(@Nullable ClassLoader tempClassLoader); // 獲取臨時加載器 ClassLoader getTempClassLoader();
bean的元數據緩存,默認爲true。若是爲false,每次建立bean都要從類加載器獲取信息。post
// 設置是否緩存 void setCacheBeanMetadata(boolean cacheBeanMetadata); // 獲取是否緩存 boolean isCacheBeanMetadata();
bean的表達式解析器ui
// 設置表達式解析器 void setBeanExpressionResolver(@Nullable BeanExpressionResolver resolver); // 獲取表達式解析器 BeanExpressionResolver getBeanExpressionResolver();
類型轉換器spa
// 設置類型轉換器 void setConversionService(@Nullable ConversionService conversionService); // 獲取類型轉換器 ConversionService getConversionService();
屬性編輯器prototype
// 添加屬性編輯器 void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar); // 註冊給定類型的屬性編輯器 void registerCustomEditor(Class<?> requiredType, Class<? extends PropertyEditor> propertyEditorClass); // 使用在這個BeanFactory中註冊的自定義編輯器初始化給定的PropertyEditorRegistry void copyRegisteredEditorsTo(PropertyEditorRegistry registry);
類型轉換器code
// 設置類型轉換器 void setTypeConverter(TypeConverter typeConverter); // 獲取類型轉換器 TypeConverter getTypeConverter();
爲嵌入的值(如註釋屬性)添加字符串解析器對象
// 添加 void addEmbeddedValueResolver(StringValueResolver valueResolver); // 是否有 boolean hasEmbeddedValueResolver(); // 解析給定的嵌入值 String resolveEmbeddedValue(String value);
後置處理器,BeanPostProcessor
// 增長後置處理器 void addBeanPostProcessor(BeanPostProcessor beanPostProcessor); // 獲取後置處理器的個數 int getBeanPostProcessorCount();
做用域
// 註冊做用域 void registerScope(String scopeName, Scope scope); // 獲取做用域,除了單例和多例 String[] getRegisteredScopeNames(); // 經過名稱獲取做用域 Scope getRegisteredScope(String scopeName);
安全做用域
// 獲取安全做用域 AccessControlContext getAccessControlContext();
配置複製。複製內容包括全部標準配置設置以及beanpostprocessor、做用域和特定於工廠的內部設置。不該該包含任何實際bean定義的元數據,例如BeanDefinition對象和bean名稱別名。
void copyConfigurationFrom(ConfigurableBeanFactory otherFactory);
別名
// 註冊別名 void registerAlias(String beanName, String alias) throws BeanDefinitionStoreException; // 根據valueResolver移除別名 void resolveAliases(StringValueResolver valueResolver);
BeanDefinition
// 合併bean的定義,包括父類繼承下來的 BeanDefinition getMergedBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
FactoryBean
// 是不是FactoryBean boolean isFactoryBean(String name) throws NoSuchBeanDefinitionException;
正在建立的bean
// 設置bean是否在建立,循環依賴的時候要靠這個解決 void setCurrentlyInCreation(String beanName, boolean inCreation); boolean isCurrentlyInCreation(String beanName);
依賴的bean
// 註冊一個指定bean的依賴bean void registerDependentBean(String beanName, String dependentBeanName); // 獲取依賴指定bean的全部bean String[] getDependentBeans(String beanName); // 獲取指定bean的全部依賴 String[] getDependenciesForBean(String beanName);
銷燬bean
// 銷燬指定的bean void destroyBean(String beanName, Object beanInstance); // 銷燬指定範圍的bean void destroyScopedBean(String beanName); // 銷燬全部的單例bean void destroySingletons();