Spring中IOC3个最主要的类

佐手、 提交于 2020-03-08 01:14:25

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!