Spring中IOC3个最主要的类

IOC(控制反转)、DI(依赖注入)是Spring的特性中耳熟能详的两种

平时我们获取Bean都是采取自动注入,或者使用getBean()方法,器根本原理,如下图:
在这里插入图片描述
平时我们知道的类也就是ApplicationContext,因为他是Spring的主入口。当IOC容器初始化时,会读取配置文件application.xml,然后根据扫描的类,生成Bean缓存起来,存到内存里面(不重复读取,不重复加载配置文件)

首先,BeanDefinitionReader,他是一个方法类,它的作用就是讲配置文件进行读取,并且将类的配置信息读取到BeanDefinition中

Bean常用的类型:
prototype(每次用一个new一个)
singleton(生成一次一直在)
proxy(代理对象,新的字节码文件去实现原来的类)
其他类型等等

BeanDefinition类的作用,就是保存我们读取到的配置信息,保存生成的Bean的一些配置信息
当我们创建一个对象时,他会先去BeanDfinition中,根据对象的标识获取对象的基本配置信息,然后才能够创建出对象。

那BeanWrapper类的作用呢?请先看以下伪代码

Class A{
	private B b;
}
Class B{
	private A a;
}

这是对象的一种依赖方式,循环依赖,当我们注入A对象时,发现需要B对象,而当我们创建B对象时,又需要创建A,那这怎么解决呢?

Spring会先把所有的对象在容器中创建出来(无参),但是对象的引用,会先保存起来,这些引用先保存到一个包装器BeanWrapper中,这个类,只保存对象的引用。
然后我们根据BeanWrapper中对应对象的标识,去找寻它的引用,并把对象构造赋值,依次类推。

Spring容器创建A时,根据包装器中的引用去拿到B(半成品,无参),而当Spring容器创建B时,再根据包装器中的引用去拿A,此时A不是半成品,而是完成的A,然后返回上一级,B的引用锁指向的不再是半成品,而是完整版的B(如有不懂,点击这里

BeanWrapper起到了一个缓冲,完善的作用。
这便是IOC中3个最重要的类:BeanDefinition、BeanWrapper、AppliactionContext

新手小白,欢迎各位大佬评论指导☺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值