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(); }
}
复制代码
扫描二维码关注公众号,回复: 3137065 查看本文章

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

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

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

猜你喜欢

转载自www.cnblogs.com/jiangzhaowei/p/9629683.html