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中注册的自定义编辑器初始化给定的PropertyEditorRegistryvoid 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

// 是否是FactoryBeanboolean isFactoryBean(String name) throws NoSuchBeanDefinitionException;

正在创建的bean

// 设置bean是否在创建,循环依赖的时候要靠这个解决void setCurrentlyInCreation(String beanName, boolean inCreation);boolean isCurrentlyInCreation(String beanName);

依赖的bean

// 注册一个指定bean的依赖beanvoid registerDependentBean(String beanName, String dependentBeanName);// 获取依赖指定bean的所有beanString[] getDependentBeans(String beanName);// 获取指定bean的所有依赖String[] getDependenciesForBean(String beanName);

销毁bean

// 销毁指定的beanvoid destroyBean(String beanName, Object beanInstance);// 销毁指定范围的beanvoid destroyScopedBean(String beanName);// 销毁所有的单例beanvoid destroySingletons();