关于spring:Spring-水滴石穿四-工厂实现之bean工厂接口-ConfigurableListableBeanFactory

概述

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

}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理