概述
这个接口提供了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();
}
发表回复