AbstractAppliactionnContext 里面方法 refresh方法

1  我们加载配置文件 到 BeanFactory容器中
那么首先我们需要创建beanFactory容器

 

 进入构造方法

 

super  调用父类构造方法  准备初始化资源对象

setConfigLocations  加载配置文件(文件路径)

refresh()  里面包含13个方法  spring核心方法

 

 

1 准备刷新 做容器刷新前准备工作(标志位和启动时间,初始化属性资源null,获取环境资源属性,存储预刷新容器的监听器null)

 

 

1.1设置标志位和启动时间

 

1.2 初始化属性资源  为了子类实现扩展  目前什么都没有实现(在springMVC时 会出现响应扩展操作)

 

 

 

1.3  获取环境资源属性 包含了系统属性值和变量值  并且验证属性资源

 

 

1.4 存储预刷新容器的监听器

 

 

---

 2 获得一个刷新的beanFactory 容器(defaultListableBeanFactory)  加载xml配置文件的属性值到当前工厂中

具有继承关系的接口

   beanFactory子接口  能够枚举所有bean实例

 

  当前beanFactory 想要他可以参加配置 必须要实现对应的接口

 

 

 

告诉子类刷新beanFactory

 

 

如果有beanFactory 了 就先销毁掉 关闭掉beanFactory

 

 

创建一个新的beanFactory

 

 

而创建beanFactory 是  defaultListableBeanFactory

 

 

 创建完工厂之后 设置序列化id 和 定制beanFactroy

 

定制话beanFactory 信息里面设置了 允许bean定义信息被覆盖  允许循环依赖

 

 

解析xml文件

 

 

这里的configLocations 在之前刚进入refresh之前 设置配置文件的路径

 

 

当执行这一步的时候 就可以将配置文件读取到beanFactory中

 

 

 

 

 此时将xml文件中的标签解析成了map对象

----------

3  初始化beanFactory  (因为上一步刚创建了beanFactory 里面很多都是默认值)

 

3.1 设置bean的类加载器

 

 

 3.2 设置解析配置文件的 解析器 spel

 

 3.3  添加资源加载器

 

 3.4 添加beanPostProcessor 增强器

 

3.5 忽略这些Aware接口 不进行解析操作(因为此时还没有初始化完成  会在后面设置Aware接口做统一处理)

 

 

3.6  处理依赖

 

 

3.7 添加bean的增强器

 

 

 -----------------

4 执行后置处理器的相关操作(null 方便扩展操作)

 

 5 执行 BeanFactoryPostProcessors  实例化 并且 执行 所有注册过的 beanFactoryPostProcessor  单例对象在初始化之前必须被调用(beanFactory 容器对象)  实例化之后 在修改beanDefinition没有意义

 

 6. 在当前bean创建之前我们需要  实例化并且注册 所有beanPostProcessor 实例  提前准备好beanPostProcessor 需要准备的东西

 

 7 初始化消息资源 (国际化设置)

 

 8 初始化应用程序事件的广播器

 

 9 留给子类执行扩展工作

 

 10  注册监听器

 

 11  实例化所有的非懒加载单例对象(实例化操作)

 

 11.1 将beanDefinitionNames中的 bean名称放入ArrayList中

 

11.2循环创建单例对象 

 

 

11.2.1返回一个合并好的rootBeanDefinition 对象  遍历他们的父beanDefinition  也就是整合父类和子类的beanDefinition

 

11.2.2判断这个类是否实现了 beanFactory这个接口   因为我们创建的类并没有实现beanFactory这个接口

11.2.3那么执行

 

11.2.3.1 获取bean名称

 

 

 11.2.3.2 每次创建对象之前 我们需要判断1.2.3级缓存是否包含此对象 如果包含 直接从缓存中取 如果不包含 再创建对象

先检查一级缓存是否存在person 对象

 

 

 

 

 

 

 如果一级缓存没有  那么执行创建对象  因为此时shareInstance为null  所以 执行eles

 

 

 

 

创建bean实例

 

 

填充属性

 

bean实现了Aware接口的话 就会把属性填充进去  当前bean没有实现awre接口

 

执行BeanPostProcessorBeforeInitlization方法

 

 执行init-method 方法

 

 

执行BeanPostProcessorAfterInitlization方法

 

 

 返回完整对象

 

当容器关闭时  我们需要销毁该对象

 

posted @   花心大萝卜li  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示