概述

后面一章剖析了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;

办法