依赖注入

依赖注入

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等。

原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值