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