乐趣区

spring学习之源码分析ConfigurableBeanFactory

ConfigurableBeanFactory

ConfigurableBeanFactory 继承了 HierarchicalBeanFactory, SingletonBeanRegistry 两个接口。这个接口将被大多数 bean 工厂实现。

类结构

这个方法,比之前的都多,没有截全。

常量

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 都要从类加载器获取信息。

// 设置是否缓存
void setCacheBeanMetadata(boolean cacheBeanMetadata);
// 获取是否缓存
boolean isCacheBeanMetadata();

bean 的表达式解析器

// 设置表达式解析器
void setBeanExpressionResolver(@Nullable BeanExpressionResolver resolver);
// 获取表达式解析器
BeanExpressionResolver getBeanExpressionResolver();

类型转换器

// 设置类型转换器
void setConversionService(@Nullable ConversionService conversionService);
// 获取类型转换器
ConversionService getConversionService();

属性编辑器

// 添加属性编辑器
void addPropertyEditorRegistrar(PropertyEditorRegistrar registrar);
// 注册给定类型的属性编辑器
void registerCustomEditor(Class<?> requiredType, Class<? extends PropertyEditor> propertyEditorClass);
// 使用在这个 BeanFactory 中注册的自定义编辑器初始化给定的 PropertyEditorRegistry
void copyRegisteredEditorsTo(PropertyEditorRegistry registry);

类型转换器

// 设置类型转换器
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();
退出移动版