概述

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