Spring 水滴石穿(二) 工廠實現DefaultListableBeanFactory

概述

前面一章分析了beanfactory的接口體系,如今看一個完整的beanfactory實現,它實現了咱們上一章說到的三個接口,提供了一個完整的IoC能力。code

屬性

看註釋排序

/** 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;

方法

相關文章
相關標籤/搜索