spring容器启动流程?


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值