Spring学习笔记——AnnotationConfigWebApplicationContext加载BeanDefinition

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

posted @ 2018-01-08 23:29  flushest  阅读(4492)  评论(0编辑  收藏  举报