闲聊spring源码五(prepareRefresh与obtainFreshBeanFactory源码)

概述

这次是关于refresh里的两个方法 prepareRefresh()obtainFreshBeanFactory();spring 版本为 6.0.12

  • prepareRefresh(准备刷新)
    • 1.设置容器的启动时间
    • 2.设置活跃状态为true
    • 3.设置关闭状态为false
    • 4.获取Environment对象,并加载当前系统的属性值到Environment对象中
    • 5.准备监听器和时间的集合对象,默认为空的集合
  • obtainFreshBeanFactory
    • 1.如果存在旧 BeanFactory,则销毁
    • 2.创建新的 BeanFactory (DefaultListableBeanFactory)
    • 3.解析xml/加载bean定义,注册bean定义到beanFactory(不初始化)
    • 4.返回新的 BeanFactory (DefaultListableBeanFactory)

相关链接

阅读之前,可以先浏览一下

系列文章聚合

源代码定位

根据下面的全类名,在idea中快速定位并打上断点

# 源代码快速定位
org.springframework.context.support.AbstractApplicationContext#refresh
# 两个重要方法
// Prepare this context for refreshing.
// 一.准备刷新
// 1.设置容器的启动时间
// 2.设置活跃状态为true
// 3.设置关闭状态为false
// 4.获取Environment对象,并加载当前系统的属性值到Environment对象中
// 5.准备监听器和时间的集合对象,默认为空的集合
prepareRefresh();
# ----------
// 二. 初始化 新的BeanFactory
// 1.如果存在旧 BeanFactory,则销毁
// 2.创建新的 BeanFactory (DefaultListableBeanFactory)
// 3.解析xml/加载bean定义,注册bean定义到beanFactory(不初始化)
// 4.返回新的 BeanFactory (DefaultListableBeanFactory)
// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

两个方法

prepareRefresh 与 obtainFreshBeanFactory

prepareRefresh()

prepareRefresh 刷新之前的一些准备

// 方法快速定位
org.springframework.context.support.AbstractApplicationContext#prepareRefresh

在这里插入图片描述
在这里插入图片描述

上面的图片,涉及了上一篇spring源码四初始化好的一些对象,重要的源码已标注

obtainFreshBeanFactory()

见名知意,获取一个beanFactory

// 源码快速定位
org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory

在这里插入图片描述
loadBeanDefinition(beanFactory)详解链接

结束

这两个方法相对简单,loadBeanDefinition(beanFactory)这个是单独一篇文章进行了说明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流月up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值