SpringIoC容器概述,通过实例理解IoC的概念

IoC的概念

IoC(Inverse of Control,控制反转)是Spring容器的核心,但是IoC这个重要的概念却比较晦涩难懂,不容易让人见名知意。不过IoC确实包括很多内涵,它涉及代码解耦,设计模式,代码优化等问题的考量。我通过一个简单的小例子说明这个概念。

实例

现有2码农,负责公司的一个项目的编码代码如下:

public class ZhangSan {
    public void playCode(){
        System.out.println("努力的敲代码");
    }
}
public class LiSi {
    public void playCode(){
        System.out.println("认真的敲代码");
    }
}
public class Demo {
    public void demo01() {
        //①、张三侵入项目
        ZhangSan zhangSan = new ZhangSan();
        zhangSan.playCode();
    }
}

我们会发现项目①处,码农张三直接侵入到了项目中,使项目和敲代码的张三直接耦合在了一起。如果此时张三辞职不干了,需要一名新的码农李四代替,我们就需要修改demo01中的代码,将①处的代码替换成LiSi lisi = new LiSi()。

一个项目是否完成应该围绕项目的进度进行,而不应该考虑编码的具体人员,这样才能项目在没有开展前  自由的选择   合适的码农。通过以上分析,我们知道需要为该项目定义一个编码的接口:

public interface WriteCode{
    void playCode();
}
public class ZhangSan implements WriteCode{
    public void playCode(){
        System.out.println("努力的敲代码");
    }
}
public class LiSi implements WriteCode{
    public void playCode(){
        System.out.println("认真的敲代码");
    }
}
public class Demo {
    public void demo01() {
        //①、引入编码的接口
        WriteCode writeCode = new ZhangSan();
        //②通过接口进行编码
        writeCode.playCode();
    }
}

我们可以发现①处引用编码的接口,在项目开展时由张三负责编码。但此时演示同时依赖于WriteCode接口和张三类,并没有达到我们所预期的项目仅依赖于编码,但是编码又需要具体的码农业能编写,如何才能让张三和项目无关又能完成编码的具体工作呢?当然是在项目没有开展之前,项目经理将张三安排在WriteCode的工作上。项目经理将项目,编码,码农装配起来如下:

public class Demo {
    private WriteCode writeCode;
    public Demo(WriteCode writeCode){
        this.writeCode = writeCode;
    }
    public void demo01() {
        writeCode.playCode();
    }
}
public class PM{//项目经理
    public void schedule(){
        WriteCode writeCode = new ZhangSan();
        Demo demo = new Demo(writeCode);
        demp.demo01();
    }
}

通过引入项目经理PM,使项目和具体的编码人员解耦对应软件,项目经理就像是一个装配器,安排项目具体的编码人员通过上述实例我们可以反过来讲解的IoC的概念了。:

IoC(Inverse of Control)的字面意思是控制反转,那么是什么控制被反转了呢?对应上述的实例  “控制” 就是指选择编码人员的控制权“反转”就是指将这种控制权从项目中移除,转交给项目经理。

因为IoC确实不能够开门见山,所有后来有一位软件界的大佬级人物Martin Fowler提出了DI(依赖注入:Dependency InInjection)的概念用以代替IoC,即让调用类对某一接口实现类的依赖关系由第三方注入,以移除调用类对于某一接口实现类的依赖。显然“依赖注入”这个名词要比“控制反转”明了直接,易于理解这也就是为什么“IoC也称之为DI“。

 

猜你喜欢

转载自blog.csdn.net/jbfx455l/article/details/81585171
今日推荐