天天看点

IOC控制反转(依赖注入)

一。什么叫控制反转

IOC控制反转(依赖注入)

MoAttack 墨攻剧本需要一个英雄,去喊话,“墨者革离”。这时候剧本就控制LiuDeHua(刘德华)去喊话。

这个演员不一定确定是刘德华,我们可能找其他人来喊话,但是这个人必须有一个功能喊话。所以我们定义了一个角色接口(GeLi)演员实现这个接口。

IOC控制反转(依赖注入)

我们需要实现剧本只是依赖角色。而不依赖演员。这个时候我们引入一个新的对象。导演

public MoAttack{
    private Geli geli;
    public void setGeli(Geli geli){
        this.geli = geli;
    } 
    public void cityGateAsk(){
        geli.responseAsk("墨者革离");
    }
}


----------
public interface GeLi{
    void responseAsk();
}
public Class LiuDeHua{
    public void responseAsk(){
        system.out.println("墨者革离");
    }
}
public Class Director{
    public static void main(string[] args){
        GeLi geli= new LiuDeHua();
        Moattack moattack = new Moattack();
        Moattack.setGeLi(geli);
        Moattack.cityGateAsk();
    }
}
           

这样就讲剧本和刘德华解耦了。可以安排不同的人来出演。

IOC控制反转(依赖注入)

控制反转的含义:某一接口具体实现类的选择控制权,从调用类中移除,转交给第三方决定. 控制反转后来也叫依赖注入, 依赖注入:调用类对某一接口实现类的依赖关系有第三方(容器或者协助类)注入。

IOC依赖注入有三种方式。

  1. 构造函数注入
  2. 属性注入
  3. 接口注入
public MoAttack{
    private Geli geli;
//  public void setGeli(Geli geli){
//      this.geli = geli;
//  } 
    public MoAttack(GeLi geli){
        this.geli = geli;
    }
    public void cityGateAsk(){
        geli.responseAsk("墨者革离");
    }
}
           

以上就是构造函数依赖注入,和属性方法依赖注入的对比。

对于接口注入它的效果和属性注入无本质区别,有点多次一举的意思。

以上是协助类注入,还是自己写代码。但是我们的角色,导游可能都是海选的,即角色不是由导演选择,三者解耦。这时候就要用到容器了

spring就是这样的一个容器。它通过配置文件或者注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入的工作。

IOC控制反转(依赖注入)

先实例化,然后依赖注入。

以上知识参考:精通spring4.x企业应用开发实战等相关书籍。