spring源码之refresh方法流程解析

refresh方法:
1、为IOC容器以及Bean的生命周期管理提供条件。
2、刷新Spring上下文信息,定义Spring上下文加载流程。其中ConfigurationClassParser解析各种标签比如@Bean

阅读源码:
在这里插入图片描述

this.prepareRefresh();
1.设置spring容器的启动时间
2.撤销关闭状态
3.开启活跃状态
4.初始化属性元信息initPropertySource()
5.验证环境中必须存在的属性

ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
获取BeanFactory实例

this.prepareBeanFactory(beanFactory);
对BeanFactory进行相关的设置,为后续的使用做准备
1.设置ClassLoader用来加载Bean
2.设置表达式解析器等等

this.postProcessBeanFactory(beanFactory);
模板方法,让不同的spring容器自定义扩展自己的加载方法,方法体为空

this.invokeBeanFactoryPostProcessors(beanFactory);
(会跳转到ConfigurationClassParser.doProcessConfigurationClass解析各种标签比如@Bean等)
调用工厂后处理器处理解析各类Bean标签(@Configuration/@Import/@Bean/@SpringbootApplication),扫描Bean文件,并解析成一个个的Bean,这里的Bean只是被加载到spring容器当中,由于spring容器的懒加载,这些Bean仅仅只是加载到容器,并没有连接和初始化,当程序需要使用到该Bean的时候,才会将bean连接和初始化。

this.registerBeanPostProcessors(beanFactory);
在容器中找出实现BeanPostProcessors接口的bean,设置到BeanFactory的属性之中,最后bean被实例化的时候会调用BeanPostProcessors(bean的后置处理器),

this.initMessageSource();
加载国际化信息

this.initApplicationEventMulticaster();
初始化事件的广播器,用于事件的发布

this.onRefresh();
模板方法:让不同的spring容器自定义扩展自己的加载方法,方法体为空

this.registerListeners();
注册监听器

this.finishBeanFactoryInitialization(beanFactory);
实例化BeanFactory中已经被注册但是没有实例化的所有bean(懒加载不需要被实例化)

this.finishRefresh();
初始化生命周期处理器等相关的事情

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值