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

依赖注入

发布时间:2020-12-14 05:14:12 所属栏目:百科 来源:网络整理
导读:依赖注入 1. 什么是依赖 在classA中有classB的实例,则称classA对classB有一个依赖。 public class A{ B b; public A (){ b = new B(); }} 其中类A对类B有一个依赖。 对于上述例子,会有如下问题 如果要用b = new B(int n)来实例化b,则需要修改class A的代

依赖注入

1. 什么是依赖

在classA中有classB的实例,则称classA对classB有一个依赖。

public class A{
    B b;
    public A(){
        b = new B();
    }
}

其中类A对类B有一个依赖。
对于上述例子,会有如下问题

  1. 如果要用b = new B(int n)来实例化b,则需要修改class A的代码
  2. 如果不同的B的对象对A的影响会很困难,因为B的对象已经写死在A中
  3. 如果new B() 过程很慢,单测时我们希望用已经初始化好的对象来mock掉这个过程也很困难
2. 依赖注入

上例中依赖在构造函数直接初始化是一种hard init的方式,弊端在于连个类不够独立,一下用另外一种方式来初始化

public class A{
    B b;
    public A(B b){
        this.b = b;
    }
}

上述代码中将对象作为构造函数的参数传入,在掉用构造函数之前外部就已经初始化好了B的对象。像这种非自己主动初始化依赖,而通过外部传入依赖的方式,称为依赖注入
由此有连个好处

  1. 解耦
  2. 方便单元测试,尤其mock测试
3. 在JAVA中实现依赖注入

在java中实现依赖注入有多种方式,其中最常见的就是通过注解的方式。
通过在字段的声明前添加@Inject注解进行标记,来实现依赖对象的自动注入。

public class Human{
    @Inject Father father;
    public Human(){
    }
}

事实上这样还不能自动完成依赖注入,还需要一个依赖注入框架,并进行简单的配置。Java语言流行的依赖注入框架有google guice,spring等。在Android上比较流行的有RoboGuice,Dragger等。

原文地址

(编辑:李大同)

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

    推荐文章
      热点阅读