spring學習之源碼分析--ConfigurableBeanFactory

ConfigurableBeanFactory

ConfigurableBeanFactory繼承了HierarchicalBeanFactory, SingletonBeanRegistry兩個接口。這個接口將被大多數bean工廠實現。segmentfault

類結構

這個方法,比以前的都多,沒有截全。
image.png緩存

字段

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();
相關文章
相關標籤/搜索