欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IoC控制反转是什么意思?

程序员文章站 2022-07-12 13:58:52
...

最近由于日本项目的需要,开始学习Spring框架的东西。虽然框架被日方公司进行了一定的修改,但Spring大体原理是不变的。Spring最大的特点,相信大家在网上看了许多,都知道是控制反转(IOC),或者叫依赖注入(DI),那么究竟什么是控制反转,什么是依赖注入呢?

IOC(inversion of control)控制反转模式;控制反转是将组件间的依赖关系从程序内部提到外部来管理; 

DI(dependency injection)依赖注入模式;依赖注入是指将组件的依赖通过外部以参数或其他形式注入;

看起来很绕是不是,这样,先把这个问题搁置在这里,咱们先谈一些别的东西。我先提一个东西:程序的耦合。看下面这个例子

class A {
  AInterFace a;
  A(){};
  Amethod() {
     a = new AInterfaceImpl();
  }
}

Class A中我先声明了一个借口a,然后构造了A(只不过什么都没写),定义了一个方法,在这个方法里面实例化AInterfaceImpl这个类出来,那么Class A和AInterfaceImpl就存在了耦合的关系,也可以说Class A依赖于AInterfaceImpl,没有AInterfaceImpl,Class A就创建不出来。

这只是简单举个例子,只是一种耦合关键,相信大家在实际写代码的时候肯定遇到过这样的情况,一个类里面要new好几个其他类,程序运行是全部new的,但实际运行的时候未必用得上,这样就造成了一定的运算和存储的浪费。

控制反转,就是把这种依赖关系剥离开(需要在class A中new的类,现在不用了,从其他地方获得),把里面对象的创建,依赖的代码,交给容器来实现(是的,Spring就是个容器),将原有的依赖关系(Class A和AInterfaceImpl依赖,而不是BInterfaceImpl)交给xml、properties这样的文件去描述。

IoC控制反转是什么意思?

这样做有什么好处?由于把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了。当然这种方式对于刚刚新接触的朋友来说可能不太习惯,经常忘记修改xml导致莫名其妙的错误也是家常便饭(别问我怎么知道的)。

所以控制反转IOC是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IOC容器,它就是一个专门用来创建对象的工厂(BeanFactory),你要什么对象,它就给你什么对象,有了 IOC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IOC容器了,通过IOC容器来建立它们之间的关系。

上一篇: Spring IoC

下一篇: Spring - IoC