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