加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dependency-injection(依赖注入)

发布时间:2020-12-13 21:59:40 所属栏目:百科 来源:网络整理
导读:概念 Inversion of Control: 控制翻转;是一个重要的面向对象编程原则,控制反转就是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依

概念

  • Inversion of Control: 控制翻转;是一个重要的面向对象编程原则,控制反转就是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

    控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

  • Dependency Injection:依赖注入,依赖注入模式是指客户类Client不用自己来初始化(new)它所依赖的成员变量IServer,而是等待某个对象创建IServer的适当的(实现类)的对象并将它赋值给Client的成员变量。

sample

classA
{
    AInterface a;

    A(){}

    AMethod()//一个方法
    {
        a = new AInterfaceImpl();
    }
}

这里面 Class AAInterfaceImpl就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了,依赖注入就是为了解决这种耦合关系的

使用new(对象创建)是一种硬编码,是代码耦合度变得很高,不方便测试.依赖注入简单的讲就是通过外界传入依赖来进行成员变量的初始化

依赖注入的三种实现方式

  • Contructor Injection(构造函数注入)
public interface IFather {
  //method
}
public class Human {
    IFather father;
    public Human(IFather father) {
        this.father = father;
    }
}
  • 基于setter,通过JavaBean的属性(setter方法)为可服务对象指定服务
public class Human {
 IFather father;
    public void setIFather(IFather father) {
        this.father = father;
    }
}
  • 接口注入
// 注入功能的interface
public interface InjectFinder {
    void injectFinder(IFather father);
}
// 让我们的Human实现接口
public class Human implements InjectFinder {
 IFather father;
 public void injectFinder(IFather father) {
       this.father = father;
    }
}

参考:
dependency-injection
dependency-injection-theory
依赖注入(Dependency Injection)模式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读