Spring IOC

什么是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容器就用来解决这部分的内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容