IOC和DI究竟是什么?

   在学习Spring框架的时候,咱们老是能见到IOC这个单词,也时常听到DI这个词,那么他们分别是什么意思呢?接下来就讲讲我的对于这两个概念的理解框架

   1、IOC和DI概念ide

  IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后再也不由本身自己的对象进行控制这个内置对象的建立,而是由第三方系统去控制这个内置对象的建立。学习

  DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是经过注入的方式进行建立。this

     那么IOCDI这二者又是什么关系呢?spa

  IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。设计

   2、实例理解IOCcode

class Person{
    
    private Wear clothe;

    public Wear getClothe() {
        return clothe;
    }

    public void setClothe(Wear clothe) {
        this.clothe = clothe;
    }
    
    public void Wear(){
        clothe  = new Sweater();
        clothe.WearClothe();
    }   
}

interface Wear{
    void WearClothe();
}

class Sweater implements Wear{

    @Override
    public void WearClothe() {
        // TODO Auto-generated method stub
        System.out.println("穿毛衣");
    }    
}

class Shirt implements Wear{
    @Override
    public void WearClothe() {
        // TODO Auto-generated method stub
        System.out.println("穿衬衫");
    }    
}
public static void main(String[] args){
        Person person = new Person();
        person.Wear();
    }

  在上面的代码中咱们定义一个Wear接口,两个实现了该接口的类Sweater和Shirt,在Person类的Wear须要调用Wear接口的WearClothe方法,传统的作法是在Person的Wear中建立该接口的实现类,而后经过该对象对调用这个方法。在Person对象的内部建立了这个对象,既是控制了这个对象,当咱们须要调用Shirt的WearClothe方法的时候就须要改动Person类中Wear方法的代码,去建立一个Shirt类对象。对象

  而在IOC的设计思想中,咱们将再也不Person的内部进行建立Clothe属性的引用对象,而是在外界建立该对象,而后注入到Person对象中。代码实现以下:blog

  修改Person类的Wear方法:接口

  public void Wear(){
        clothe.WearClothe();
    }

  在main方法中调用:

  public static void main(String[] args){
        Wear wear= new Sweater();
        Person person = new Person();
        person.setClothe(sweater);
        person.Wear();
    }

   经过在外界建立一个Wear接口的实现类对象,而后将该对象传入person对象中,将person对象对于sweater对象的控制反转,person对象再也不进行Wear接口实现对象的建立。若是咱们须要调用Shirt的wear方法,只须要更改建立Shirt对象,再也不须要修改Person类内部的方法,就能够实现了。

    这就是我理解的IOC,简单来讲就是把原本在类内部控制的对象,反转到类外部进行建立后注入,再也不由类自己进行控制,这就是IOC的本质。

相关文章
相关标签/搜索