Dagger2使用(二)“依赖” “注入” 基本概念

       

2.1        依赖

        如果在 ClassA中,有 ClassB 的实例,则称 ClassA ClassB 有一个依赖。

2.2        依赖注入

        依赖注入就是非自己主动初始化依赖,而通过外部来传入依赖的方式,简单来说就是不使用 new 来创建依赖对象。

        如:客户类Client(依赖概念中的ClassA)不用自己来初始化它所依赖的成员变量IServer(依赖概念中的ClassB),而是等待某个对象创建IServer的适当的(实现类)的对象并将它赋值给Client的成员变量。

        依赖注入框架主要用于模块间解耦,Client仅仅与(通常是接口或抽象类)IServer耦合,而不与IServer的子类型耦合,提高代码的健壮性和可维护性。

2.2.1    依赖注入的基本原则

        应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。

2.2.2    依赖注入的方式

        站在Client的角度,Client接受注入有3种的方式。

        a)   构造器注入(Constructor Injection)

        客户类Client提供了public的构造器Client(IServer s),等待外界创建IServer的(实现类的)对象后将其引用传递进来/注入。

public Client(IServer s){
   this.s=s;
}

        b)       属性(设置)注入
        Setter注入(Setter Injection)时,客户类Client提供setIServer (IServers),等待外界创建IServer的(实现类的)对象后将其引用传递进来/注入。

public void setIServer (IServer  s){
    this.s=s;
}

        c)   接口注入
        接口注入相当于将Setter注入的setIServer (IServer s) 方法封装到一个专用的接口如InjectIServer中,而Client实现InjectIServer并给出如下的方法体。

@Override public void setIServer (IServer s){
this.s=s;
}
//
//接口注入针对的场景是,有大量Client、Client1等都需要依赖于IServer。
public interface InjectIServer{
    public void setIServer (IServer s);
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值