【源码课一】

spring源码

综述

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。

使用5.2.9版本spring学习,实际我用的5.3.3。spring是springboot和springcloud的基础,只有看懂spring源码才能看懂其他2个。spring 的扩展性很强,一个接口可能实现了几十上百个类,所以需要抓住主线脉络梳理;

在这里插入图片描述
spring核心就2个,IOC和AOP,但必须先搞懂IOC。IOC是控制反转思想,DI是依赖注入的实现手段。
之前都是xml中配置bean对象,然后通过方法解析xml,最后getBean方法获得对象,过程中是怎么做的?
如下图所示,这就是住脉络,同时每个步骤中有很多的拓展以增强当前步骤,也就是有很多类方法,看着很复杂。
在这里插入图片描述
下图是,容器中使用Map存储对象信息,getBean方法获得对象就很适合这个数据结构。有4种存储对象方式,第三种涉及三级缓存,这个会解决循环依赖问题,后续讲。
在这里插入图片描述

解析xml

beanDefinitionReader接口是拓展定义规范的。
在这里插入图片描述
上图中使用反射实例化对象,是为了更灵活方便,能拿到类的所有信息。
涉及反射,spring bean有4个scope,分别是是默认的singleton,prototype,request,session。
下图是创建Class对象方式
在这里插入图片描述

一定要知道的3个类,看源码经常出现
在这里插入图片描述

SpringIOC原理

1、创建BeanFactory, DefaultListableBeanFactory
2、加载配置文件,将配置文件的信息通过BeanDefinitionReader读取为BeanDefinition信息对象
3、然后通过BeanPostProcessor的一系列后置增强处理,常用的是PlaceHolderPostProcessor(替换占位符)
4、再通过反射的方式将BeanDefinition实例化为bean对象,这个时候仅仅是在堆中开辟了一个内存空间,对象的属性值都是默认的
5、再将bean对象进行初始化,(属性赋值、处理Aware回调、beanPostProcessor的前置处理(beafore)、处理init-method的方法、处理beanPostProcessor的后置处理(after))
6、初始化完成,得到一个完整的bean,放入到容器中,供容器后续的使用getBean();
7、最终关闭容器,销毁bean对象
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值