六、【源码】应用上下文

源码地址:https://github.com/spring-projects/spring-framework

仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/06-application-context

应用上下文

实现应用上下文的核心类:

1.ApplicationContext:Spring 应用上下文的标准接口,提供了丰富的企业级功能,如国际化、事件发布、资源处理等
2.ConfigurableApplicationContext:增加了一些配置上下文的额外操作方法。提供了启动、停止、刷新和关闭应用上下文的方法。
3.AbstractApplicationContext:实现了 refresh() 方法来刷新上下文,以及其他管理和配置上下文的通用逻辑。
4.AbstractRefreshableApplicationContext:提供了一些支持动态刷新配置的能力,比如重新加载配置文件。
5.AbstractXmlApplicationContext:实现了从XML文件加载Bean定义的逻辑
6.ClassPathXmlApplicationContext:指定从类路径(classpath)中加载 XML 文件来初始化 Spring 容器

操作Bean的两个关键接口:
1.BeanFactoryPostProcessor:

  • 作用:在 Bean 实例化之前,对 Bean 的定义信息 BeanDefinition 进行修改
  • 执行时机:容器refresh阶段

2.BeanPostProcessor:

  • 作用:在 Bean 对象实例化、属性注入之后自定义修改 Bean 对象
  • 执行时机:Bean实例化阶段

容器初始化执行流程:

1.使用ClassPathXmlApplicationContext加载配置文件,然后刷新容器

  • 创建一个DefaultListableBeanFactory容器,读取XML加载Bean定义到容器中
  • 获取到刚初始化的容器
  • 执行所有注册的BeanFactoryPostProcessor,使用getBeansOfType取出BeanFactoryPostProcessor的所有子类,然后初始化Bean实例,封装成一个map,遍历map依次执行他们的postProcessBeanFactory方法
  • 注册所有BeanPostProcessor,使用getBeansOfType取出BeanPostProcessor的所有子类,然后初始化Bean实例,封装成一个map,遍历map依次加入到容器中存储,Bean实例化时使用
  • 初始化所有Bean

2.初始化Bean时分3步:

  • 反射初始化Bean对象
  • 属性注入
  • 执行所有的BeanPostProcessor方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值