AbstractApplicationContext.obtainRefreshFactory方法獲得新的BeanFactory,主要操作由子類自定義實現

AbstractRefreshableApplicationContext.refreshBeanFactory方法,初始化DefaultListableBeanFactory

1.customizeBeanFactory方法自定義設置BeanFactory屬性
2.loadBeanDefinitions方法加載所有BeanDefinition,根據子類不同而不同,以AnnotationConfigWebApplicationContext為例
a)獲取AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionReader及BeanNameGenerator
b)若BeanNameGenerator不為空,則AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionReader使用設置的BeanNameGenerator;若為空,則取各自默認BeanNameGenerator
c)同理,ScopeMetadataResolver與BeanNameGenerator相同邏輯;ScopeMetadataResolver用於解析@Scope注解
d) 注冊自定義添加的annotatedClass到AnnotatedBeanDefinitionReader中

AnnotatedBeanDefinitionReader.registerBean方法,注冊Class作為BeanDefinition

e)ClassPathBeanDefinitionScanner掃描指定包路徑下所有class
f)取configLocations配置,先當作AnnotatedClass進行注冊,若找不到類,則當作包路徑用以掃描BeanDefinition

