Spring 水滴石穿(二) 工厂实现DefaultListableBeanFactory

概述

前面一章分析了beanfactory的接口体系,现在看一个完整的beanfactory实现,它实现了我们上一章说到的三个接口,提供了一个完整的IoC能力。

属性

看注释

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


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

    /** 是否允许期望类加载*/
    private boolean allowEagerClassLoading = true;

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

    /** 自动装配候选者解析器,判断是否可以用来装配 */
    private AutowireCandidateResolver autowireCandidateResolver = SimpleAutowireCandidateResolver.INSTANCE;

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

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

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

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

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

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

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

    /** 冻结一些bean定义的名字防止修改*/
    @Nullable
    private volatile String[] frozenBeanDefinitionNames;

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

方法

你可能感兴趣的:(java,spring)