目录
一、控制反转如何出现的?
首先,我们学习java编程时,必定要接触到spring这个框架的,这个spring是春天的意思,的确现在它就是java的春天,长盛不衰;好了,我们进入到正题,我们今天要讲一下spring的一个控制反转,首先,我们先说一下它出现的背景,
在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题,他通过研究,发现了大多数应用程序都是由俩个或是更多的类,通过彼此的合作来实现企业的业务逻辑的,如果是按传统的方式的话,那么每个对象都需要获取与其合作的对象的引用,相当于一个对象中包含并调用了很多A对象、B对象、C对象等等。这些对象的获取过程都需要靠自身实现,也就是自己必须主动地去创建对象B或者使用已经创建的对象B,无论是创建对象还是说使用对象,控制权都在自己,这样将会导致代码高度耦合并且难以维护和调试。
所以,就提出来“控制反转”的概念,
控制反转是面向对象编程中的一种设计原则,它是面向对象编程中的一种设计原则,通过这种方式,我们就不需要自己主动去new对象,相当于第三方给我们对象,我们直接使用就可以了,而这个第三方就是一个俗称的ioc容器,专门管理对象的生命周期和依赖关系的。
二、IOC的理解
1.按以前的方式,没有使用ioc,如图所示,下面的对象都是互相关联的,比如,我要在类中使用对象A,而对象A里面又需要分别new对象B和对象C,所以它们之间就高度耦合了
2.按现在的方式,使用了ioc,如图所示,由于引进了第三方,全部对象的控制权全给了这个IOC容器,所以,IOC容器就称为了核心,这样做的好处是,降低了各个对象的依赖关系,比如,我要在类中使用对象A,对象A在运行到需要对象B、对象C的时候,IOC容器会帮你主动创建一个对象B和对象C,来注入到对象A需要的地方。
3.使用后,效果如图所示,这时的几个对象已经没有了耦合的关系了,互相没有了关联。这时候,我在开发测试时,突然间发现了bug,我需要调整相关的对象,比如,我在使用对象A时,需要用到别的对象,此时,我只需要通过注解的方式,来注入另一个对象,还有注入的对象B可能有了调整,但我对象A不受影响,这就解耦合了,方便于以后的代码的调整和测试。