什么是IOC?
IOC(Inversion Of Control),即“控制反转”。
Java程序是一个复杂而精密的系统,内部有大量的对象(Bean),它们互相依赖,改变一个对象A,依赖对象A的对象B也需要更改,牵一发而动全身,可能会影响到整个程序。
以车架,底盘,轮子为例:车架→依赖→底盘,底盘→依赖→车轮,三者存在高耦合;最上层是车架,最下层是轮子。如果想改变车架的大小,会导致底盘和车轮发生变化。代码如下:
public class Demo {
public static void main(String[] args) {
Carframe carframe = new Carframe(20);
}
}
class Carframe{ //车架
private Chassis chassis;
public Carframe(int size) {
chassis = new Chassis(size);
}
public void Size(){
System.out.println();
}
}
class Chassis{ //底盘
private Wheel wheel;
public Chassis(int size) {
wheel = new Wheel(size);
}
}
class Wheel{ //车轮
private int size;
public Wheel(int size) {
this.size = size;
}
}
如果想改变一下车架的大小,会发现这是一个递归的过程,是从下层车轮的大小控制上层车架的大小。
如果使用依赖注实现控制反转,就会改为上层控制下层。代码改为:
public class Demo {
public static void main(String[] args) {
Carframe carframe = new Carframe(new Chassis(new Wheel(20)));
}
}
class Carframe{ //车
private Chassis chassis;
public Carframe(Chassis chassis) {
this.chassis = chassis;
}
public void Size(){
System.out.println();
}
}
class Chassis{ //底盘
private Wheel wheel;
public Chassis(Wheel wheel) {
this.wheel = wheel;
}
}
class Wheel{ //车轮
private int size;
public Wheel(int size) {
this.size = size;
}
}
即把底层的类作为参数传递给上层,实现上对下的控制。
但是,这么做还是new了很多的对象:
Carframe carframe = new Carframe(new Chassis(new Wheel(20)));
而IOC容器就用来解决这部分的内容。