IOC控制反转(依赖注入)

来源:互联网 发布:云同步盘 linux 编辑:程序博客网 时间:2024/05/29 06:44

一。什么叫控制反转
这里写图片描述

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

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

这里写图片描述

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

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依赖注入有三种方式。

  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就是这样的一个容器。它通过配置文件或者注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入的工作。
这里写图片描述

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

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

原创粉丝点击