前面一章分析了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;