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

2次阅读

共计 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();}
正文完
 0