共计 3508 个字符,预计需要花费 9 分钟才能阅读完成。
概述
这个接口提供了 DefaultListableBeanFactory 的许多性能,本节次要剖析这个接口提供的性能,实现前面在剖析,先看其接口加强体系。
接口体系
能够看到这里除了继承咱们第二节中提到的三大工厂接口外,还继承了一个单例注册接口和可配置的工厂接口,咱们接下来先看看这俩个接口提供了什么性能
SingletonBeanRegistry
这个接口正如其名,提供单例的治理性能,包含注册,获取等性能
public interface SingletonBeanRegistry {
// 注册单例
void registerSingleton(String beanName, Object singletonObject);
// 获取单例
@Nullable
Object getSingleton(String beanName);
// 校验是否存在单例
boolean containsSingleton(String beanName);
// 获取所有单例名
String[] getSingletonNames();
// 获取所有单例的数目
int getSingletonCount();
// 返回一个单例互斥对象
Object getSingletonMutex();
ConfigurableBeanFactory
这个接口就是加强 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();}
正文完