关于java:Spring-水滴石穿二-工厂实现DefaultListableBeanFactory

52次阅读

共计 1466 个字符,预计需要花费 4 分钟才能阅读完成。

概述

后面一章剖析了 beanfactory 的接口体系,当初看一个残缺的 beanfactory 实现,它实现了咱们上一章说到的三个接口,提供了一个残缺的 IoC 能力。

属性

看正文

/** k-v,k 序列化 id,v 是工厂实例 */
    private static final Map<String, Reference<DefaultListableBeanFactory>> serializableFactories =
            new ConcurrentHashMap<>(8);


    /** 是否容许同一个 beanName 的 bean 定义重写 */
    private boolean allowBeanDefinitionOverriding = true;

    /** 是否容许冀望类加载 */
    private boolean allowEagerClassLoading = true;

    /** 一个依赖排序器 */
    @Nullable
    private Comparator<Object> dependencyComparator;

    /** 主动拆卸候选者解析器,判断是否能够用来拆卸 */
    private AutowireCandidateResolver autowireCandidateResolver = SimpleAutowireCandidateResolver.INSTANCE;

    /** 依赖的 type 与 value 的映射 */
    private final Map<Class<?>, Object> resolvableDependencies = new ConcurrentHashMap<>(16);

    /** beanName 和 beanDefinition 的映射 */
    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

    /** beanName 和 beanDefinitionHolder 的映射  */
    private final Map<String, BeanDefinitionHolder> mergedBeanDefinitionHolders = new ConcurrentHashMap<>(256);

    /** beanType 和 beanName 映射,包含单例和非单例 */
    private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);

    /** beanType 和 beanName 映射,只包含单例 */
    private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<>(64);

    /** 以注册时的程序列出 bean 定义的名字 */
    private volatile List<String> beanDefinitionNames = new ArrayList<>(256);

    /** 以注册时的程序列出手动注册单例的 bean 定义的名字 */
    private volatile Set<String> manualSingletonNames = new LinkedHashSet<>(16);

    /** 解冻一些 bean 定义的名字避免批改 */
    @Nullable
    private volatile String[] frozenBeanDefinitionNames;

    /** 是否解冻 bean 定义 */
    private volatile boolean configurationFrozen = false;

办法

正文完
 0