1. 构造一个beanfactory
在调用AnnotationConfigApplicationContext的构造方法之前,会调用父类 GenericApplicationContext的无参构造方法,会构造一个BeanFactory,为 DefaultListableBeanFactory。
2. 构造AnnotatedBeanDefinitionReader(主要作用添加一些基础的PostProcessor,同时可以通过reader进行BeanDefinition的注册)
3..构造ClassPathBeanDefinitionScanner(主要作用可以用来扫描得到并注册 BeanDefinition)
refresh()方法:
1. prepareRefresh(): 记录启动时间
2. obtainFreshBeanFactory()
进行BeanFactory的refresh,在这里会去调用子类的 refreshBeanFactory方法,具体子类是怎么刷新的得看子类,然后再调用子类的 getBeanFactory方法,重新得到一个BeanFactory
3. prepareBeanFactory(beanFactory)
向容器添加一些组件,比如
设置beanFactory的类加载器
设置表达式解析器:StandardBeanExpressionResolver,用来解析Spring中的表达式
4. postProcessBeanFactory(beanFactory)
留给子类扩展,可以继续向BeanFactory中再添加一些东西
5. invokeBeanFactoryPostProcessors(beanFactory)
执行BeanFactoryPostProcessor ,主要做的事情就是得到 BeanDefinition并注册到BeanFactory中
eg:ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry() 完成了配置类的解析
6. registerBeanPostProcessors(beanFactory)
会把BeanFactory中所有的 BeanPostProcessor找出来并实例化,并添加到BeanFactory中
7. initMessageSource()
如果BeanFactory中存在一个叫做"messageSource"的 BeanDefinition,那么就会把这个Bean对象创建出来并赋值给ApplicationContext的 messageSource属性,让ApplicationContext拥有国际化的功能
8. initApplicationEventMulticaster()
初始化事件分发器,如果BeanFactory中存在一个叫 做"applicationEventMulticaster"的BeanDefinition,那么就会把这个Bean对象创建出来并 赋值给ApplicationContext的applicationEventMulticaster属性,让ApplicationContext拥有事件发布的功能
9. onRefresh() 留给子类扩展
10. registerListeners: 注册监听器
11. finishBeanFactoryInitialization(beanFactory)
完成BeanFactory的初始化,主要就是实例化非懒加载的单例Bean
12.finishRefresh: 完成整个容器的初始化,发布BeanFactory容器刷新完成的事件。