Spring中的IOC
1.什么是IOC
Ioc----Inversion Of Contronller,即“控制反转”,不是什么技术,而是一种设计思想,讲道理,我在第一次写代码的是有用的还是c语言,在c语言中基本上都是面对过程编程,还没有面对对象编程的概念,所以在这些代码中,我们的功能类中所依赖的其他对象,基本上都是我们再需要的时候手动给new(创建)出来,这个就是我们的客户端程序依赖于所需要创建的对象,这个样的设计,带来的主要的问题,就是程序具有的高耦合性,导致代码的结构极差,而IOC的设计理念的出现就是为了缓解(不能说解决,耦合性还是存在的)类似的问题。
传统的客户和依赖的类的交互过程下图:
传统关系图这样的设计结构,是客户端直接和所需要创建的类直接交互,而在IOC的设计思想的出现之后就出现了如下图所述:
IOC/DI模式这样结构的出现,就会出现一个现象,这时候客户端类和所依赖的类之间,会有一个容器进行交互,我觉得这类似于某种代理模式类似,这个时候,客户端不用再去考虑要去new自己所要的类,你所要的东西,都会在spring容器第一次初始化的时候全部初始化到了容器里面,这时候并不是客户端需要创建某个类了,而是在你要用到某个类的时候,我们的容器主动去找你,给你的客户端的类中,注入你需要用到的类,这样的方式耦合度就大大降低了。
2.Spring IOC的实现
大致我们可以看下springIOC 实现的过程,当我们还是用xml文件配置bean的时候,IOC的实现大致入下图所示:
IOC实现springboot中我们抛弃了这种通过xml配置bean的很笨重的方式,我们通过@Autowired的方式进行bean方式的加载,在这这种方式的bean加载的过程中主要是用了这几个方法:
springboot bean加载这个里面主要是2和3部分,其中第二部分是进行bean加载的准备工作,在其准备加载bean的时候Context准备工作的,和我们springboot中的main函数中的run方法中,在启动的时候会开启各种监听工作,而后在refreshContext才是做bean加载的重头戏,在这个地方是bean加载的主要方式
创建beanfactory标注出来的就是bean加载的关键步骤,由它来初始化bean的,我们跟进去,会看见另外一个方法
创建bean这个就是springboot里面创建bean和加载bean的地方(我个人认为),其实我个人觉得springboot和spring最大的区别,大概是前者摈弃后者重量级的xml配置,但是二者bean加载的逻辑是类似的,从下图的调用链技能看出来:
spring中的bean加载调用链上图是我从一个一片很详尽的博客中摘录的(传送门:http://www.importnew.com/19243.html),在这篇博客里面,很详尽的解释了spring中的bean加载的过程,即IOC的过程。
3.个人感觉
spring真是很神奇的设计,很佩服这些敢于颠覆的设计创新的人,IOC的设计我感觉就是改变了编程模式,还有我感觉《雪中悍刀行》是本好书,很想有那种恣意江湖无所顾忌,奈何总是有万般牵挂。
网友评论