springboot run方法执行流程详解(四)——refreshContext

10

this.refreshContext(context);	//刷新应用上下文

我们点进去看下具体执行了哪些操作:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
this.prepareRefresh();这个方法主要作用是为刷新容器做些准备工作。点进去看:
在这里插入图片描述
这里记录了启动的时间,设置了关闭标识和活跃标识。this.initPropertySources();这个操作是调用子类重写的方法,进行一些属性的初始化。this.getEnvironment().validateRequiredProperties();这一步是验证必须属性是否填写正确。
ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
这步主要操作:将现有的beanFactory干掉,然后获取一个新的beanFactory。如下图代码所示(至于为什么要这样操作,我还没有搞清楚):
在这里插入图片描述

this.prepareBeanFactory(beanFactory);
这个方法主要是对beanFactory进行一些配置,我们点进去看下:
在这里插入图片描述
beanFactory.setBeanClassLoader(this.getClassLoader());这是设置类加载器,如果加载器存在,则使用当前加载器,不存在就新加一个。
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));设置BeanExpressionResolver表达式解析器,主要用来解析EL表达式;Bean初始化完成后填充属性时会用到
beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, this.getEnvironment()));设置属性注册解析器PropertyEditor;这个主要是对某些注入的Bean的一些属性的支持;
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));ApplicationContextAwareProcessor,它是用来处理并回调实现了各种Aware接口的Bean,比如获取ApplicationContext的ApplicationContextAware接口。
beanFactory.ignoreDependencyInterface();忽略指定接口,该接口不会被注入。
beanFactory.registerResolvableDependency();设置自动装配规则。
上文引用了博文<SpringBoot深入学习(一)-- refresh()>,这位大佬解释的很详细透彻,大家也可以直接去这篇博客了解该方法。
this.postProcessBeanFactory(beanFactory);这个方法点进去看下:
在这里插入图片描述
主要分三部分,前三个方法就是往bean工厂里添加ServletContextAwareProcessor处理器,这个处理器可以拿到ServletContext和ServletConfig的引用,所以后面就忽略了ServletContext和ServletConfig的依赖。
WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this.servletContext);是注册web应用的scopes,下面的方法是注册和环境有关的beans。
this.invokeBeanFactoryPostProcessors(beanFactory);这个方法主要作用是在上下文中调用注册为bean的工厂处理器(源码及其庞大,想要具体了解的可以自行了解,这里就不展开了)。
this.registerBeanPostProcessors(beanFactory);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值