Spring中IOC与DI的的区别

Posted qiuri2008

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中IOC与DI的的区别相关的知识,希望对你有一定的参考价值。

依赖注入的前提:

 有IOC的环境,也就是将必须对象的创建权交给了Spring.

DI 介绍 

Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.

IOC与DI的的区别: 

IOC:  控制反转,将类的对象的创建交给Spring类管理创建. 
DI:    依赖注入,将类里面的属性在创建类的过程中给属性赋值. 
DI和IOC的关系: DI不能单独存在,DI需要在IOC的基础上来完成.

这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现,使用接口的引用调用的方法,永远不需要改变

 

举一个栗子:

写个接口,说咱们购物去~

public interface IShopping {
    void drive();
    String Money();    
}

在实现它两下:有钱人购物,没钱人购物     - -!这栗子举的

 

技术分享图片
public class RichMan implements IShopping{
    @Override
    public void drive() {
        System.out.println("Drive By Benz");        
    }

    @Override
    public String Money() {
        System.out.println("lot`s of money");
        return "10000";
    }
}
技术分享图片
技术分享图片
public class PoorGuy implements IShopping{
    @Override
    public void drive() {
        System.out.println("take a walk!");
    }

    @Override
    public String Money() {
        System.out.println("nothing");
        return "1";
    }
}
技术分享图片

然后我们出去玩,顺便shopping一下吧~

技术分享图片
public class Play {
    
    private IShopping shoppingSomething;
    
  //使用构造方法,将实现传入 public Play(IShopping shoppingSomething){ this.shoppingSomething = shoppingSomething; } public void withgirlFriend(){ shoppingSomething.drive(); shoppingSomething.Money(); }
}
技术分享图片

 

将想用的实现方式,用容器注入进来,这里就模拟下下怎么注入:

public class Containner {
    
    public Play getShopping(){
        return new Play(new RichMan());
    }
}

 

测试一下:

public static void main(String[] args) {
        Containner containner = new Containner();
        Play play =  containner.getShopping();
        play.withgirlFriend();    
    }

结果是:

Drive By Benz
lot`s of money

如果再依赖注入的配置时,配置为穷人的实现,那我们的代码都不用变,结果就会改变~   






以上是关于Spring中IOC与DI的的区别的主要内容,如果未能解决你的问题,请参考以下文章

Spring-1-IOC

day38 03-Spring的IOC和DI的区别

Spring之IOC与DI注解

IOC与DI的区别

阶段3 2.Spring_03.Spring的 IOC 和 DI_5 BeanFactory和ApplicationContext的区别

spring 依赖注入(DI)与控制反转(IOC)