spring容器启动流程?

5G技术 创建于:2022-01-13


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容器刷新完成的事件。

原文地址:https://blog.csdn.net/weixin_37545216/article/details/122401453

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

牛八里昂