分析ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
到本類方法後 找到核心方法refreshBeanFactory();
具體代碼在AbstractRefreshableApplicationContext類,因爲最初的跟進方法是由xml方式的啓動的spring工程,loadBeanDefinitions(解析xml,並把xml中的標籤封裝成BeanDefinition,也有通過註解加載,總之就是將一切需要初始化的bean封裝成BeanDefinition),通過用XmlBeanDefinitionReader 的loadBeanDefinitions 來加載對象,繼續向下走,就能找到一個很重要的部分registerBeanDefinitions方法,註冊BeanDefinition最重要的部分之一就是將BeanDefinition放到beanDefinitionMap(單例註冊表)裏,在之後的流程中非常重要的的一個map(key是beanname,value是BeanDefinition),還有beanDefinitionNames,所有的name的list集合,這兩個容器在之後的流程中很重要
//把beanDefinition緩存到map中
// Still in startup registration phase
this.beanDefinitionMap.put(beanName, beanDefinition);
//把beanName放到beanDefinitionNames list中,這個list着重記住,bean實例化的時候需要用到
this.beanDefinitionNames.add(beanName);
this.manualSingletonNames.remove(beanName);