Dagger 2 完全解析(一),Dagger 2 的基本使用与原理

Dagger2实现原理分析 Dagger是一个依赖注入框架,这个框架往往给人一种“高端,但是却很难用“的感觉。我们在使用或者阅读别人的项目时,往往会陷入dagger搭建的”迷宫里”绕不出来。导致Dagger被认为是android史上”最受冷落的优质库”。本文先通过理清依赖注入的概念,然后详细介绍Dagger一些常见的使用场景和注意事项,最后介绍一下Dagger主要功能实现的原理。帮助大家进行理解。 阅读详情

Dagger 2 完全解析系列:

Dagger 2 完全解析(一),Dagger 2 的基本使用与原理

Dagger 2 完全解析(二),进阶使用 Lazy、Qualifier、Scope 等

Dagger 2 完全解析(三),Component 的组织关系与 SubComponent

Dagger 2 完全解析(四),Android 中使用 Dagger 2

Dagger 2 完全解析(五),Kotlin 中使用 Dagger 2

Dagger 2 完全解析(六),dagger.android 扩展库的使用

上面文章地址是我博客上的地址,本系列文章是基于 Google Dagger 2.11-rc2 版本

依赖注入

什么是依赖

如果在 Class A 中,有 Class B 的实例,则称 Class A 对 Class B 有一个依赖。例如 Man 中有用到一个 Car 对象,即 Man 对 Car 有一个依赖。

public class Man {
    Car car;
    public Man() {
        car = new Car();
    }
    ...
}

上面这种写法是最常见的写法,但是在下面几个场景中存在一些问题:

  1. 如果要修改 Car 的构造函数,例如需要使用car = new Car(name)的方式构造时,还要修改 Man 的代码;

  2. 如果想测试不同的 Car 对 Man 的影响会很困难,例如单元测试中使用 mock 的 car 测试 Man。

什么是依赖注入

依赖注入(Dependency Injection,简称 DI)是用于实现控制反转(Inversion of Control,缩写为 IoC)最常见的方式之一,控制反转是面向对象编程中的一种设计原则,用以降低计算机代码之间耦合度。控制反转的基本思想是:借助“第三方”实现具有依赖关系的对象之间的解耦。一开始是对象 A 对 对象 B 有个依赖,对象 A 主动地创建 对象 B,对象 A 有主动控制权,实现了 Ioc 后,对象 A 依赖于 Ioc 容器,对象 A 被动地接受容器提供的对象 B 实例,由主动变为被动,因此称为控制反转。注意,控制反转不等同于依赖注入,控制反转还有一种实现方式叫“依赖查找”(Denpendency Lookup)。更多控制反转的信息请看控制反转的维基百科。

依赖注入就是将对象实例传入到一个对象中去(Denpendency injection means giving an object its instance variables)。依赖注入是一种设计模式,降低了依赖和被依赖对象之间的耦合,方便扩展和单元测试。

依赖注入的实现方式

其实在平常编码的过程中,已经不知觉地使用了依赖注入

  • 基于构造函数,在构造对象时注入所依赖的对象。
public class Man {
    Car car;
    public Man(Car car) {
        this.car = car;
    }
    ...
}
  • 基于 set 方法,使用 setter 方法来让外部容器调用传入所依赖的对象。
public class Man {
    ...
    public void setCar(Car car) {
        this.car = car;
    }
}
  • 基于接口,使用接口来提供 setter 方法。
public interface CarInjector {
    void injectCar(Car car);
}

public class Man implements CarInjector {
    ...
    @Override
    public void injectCar(Car car) {
        this.car = car;
    }
}
  • 基于注解,Dagger 2 依赖注入框架就是使用@Inject完成注入。
public class Man {
    @Inject
    Car car;
    ...
}

Dagger 2

Dagger 2 是 Java 和 Android 下的一个完全静态、编译时生成代码的依赖注入框架,由 Google 维护,早期的版本 Dagger 是由 Square 创建的。

Dagger 2 是基于 Java Specification Request(JSR) 330标准。利用 JSR 注解在编译时生成代码,来注入实例完成依赖注入。

下面是 Dagger 2 的一些资源地址:

Github:https://github.com/google/dagger

官方文档:https://google.github.io/dagger//

API:http://google.github.io/dagger/api/latest/

Dagger 2 的基本使用

上面介绍了依赖注入和 Dagger 2,下面由简单的示例开始一步一步地解析 Dagger 2 的基本使用与原理。

引入 Dagger 2

在build.gradle中添加依赖:

dependencies {
    ...
    compile 'com.google.dagger:dagger:2.11-rc2'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2'
}

如果 Android gradle plugin 的版本低于2.2,还需要引入 android-apt 插件。

使用 @Inject 标注需要注入的依赖

继续使用上面 Man 的例子:

public class Man {
    @Inject
    Car car;
    ...
}

使用javax.inject.Inject注解来标注需要 Dagger 2 注入的依赖,build 后可以在build/generated/source/apt目录下看到 Dagger 2 编译时生成的成员属性注入类。

public final class Man_MembersInjector implements MembersInjector<Man> {
  private final Provider<Car> carProvider;

  public Man_MembersInjector(Provider<Car> carProvider) {
    assert carProvider != null;
    this.carProvider = carProvider;
  }

  public static MembersInjector<Man> create(Provider<Car> carProvider) {
    return new Man_MembersInjector(carProvider);
  }

  @Override
  public void injectMembers(Man instance) {
    if (instance == null) {
      throw new NullPointerException("Cannot inject members into a null reference");
    }
    instance.car = carProvider.get();
  }

  public static void injectCar(Man instance, Provider<Car> carProvider) {
    instance.car = carProvider.get();
  }
}

从上面的injectMembers方法中可以看到注入依赖的代码是instance.car = carProvider.get();,所以@Inject标注的成员属性不能是private的,不然无法注入。

创建所依赖对象的实例

用@Inject标注构造函数时,Dagger 2 会完成实例的创建。

public class Car {
    @Inject
    public Car() {}
}

build 后可以在build/generated/source/apt目录下看到 Dagger 2 编译时生成的工厂类。

public final class Car_Factory implements Factory<Car> {
  private static final Car_Factory INSTANCE = new Car_Factory();

  @Override
  public Car get() {
    return new Car();
  }

  public static Factory<Car> create() {
    return INSTANCE;
  }
}

依赖注入是依赖的对象实例-->需要注入的实例属性,上面完成两步,通过 Dagger 2 生成的代码代码可以知道,生成了 Man 的成员属性注入类和 Car 的工厂类,接下来需要的就是新建工厂实例并调用成员属性注入类完成 car 的实例注入。完成这个过程的桥梁就是dagger.Component。

Component 桥梁

@Component可以标注接口或抽象类,Component 桥梁可以完成依赖注入过程,其中最重要的是定义注入接口,调用注入接口就可以完成 Man 所需依赖的注入。

@Component
public interface ManComponent {

    void injectMan(Man man);  // 注入 man 所需要的依赖

}

build 后会生成带有Dagger前缀的实现该接口的类:DaggerManComponent

public final class DaggerManComponent implements ManComponent {
  private MembersInjector<Man> ManMembersInjector;

  private DaggerManComponent(Builder builder) {
    assert builder != null;
    initialize(builder);
  }

  public static Builder builder() {
    return new Builder();
  }

  public static ManComponent create() {
    return new Builder().build();
  }

  @SuppressWarnings("unchecked")
  private void initialize(final Builder builder) {

    this.ManMembersInjector = Man_MembersInjector.create(Car_Factory.create());    // 找到 Man 的成员属性注入类,创建依赖的工厂
  }

  @Override
  public void injectMan(Man man) {
    ManMembersInjector.injectMembers(man);  // 完成依赖注入
  }

  public static final class Builder {
    private Builder() {}

    public ManComponent build() {
      return new DaggerManComponent(this);
    }
  }
}

从上面生成的代码可以看出来 Component 就是连接依赖的对象实例和需要注入的实例属性之间的桥梁。Component 会查找目标类对应的成员属性注入类(即 MembersInjector<Man>),然后把依赖属性的工厂实例(即 Car_Factory.create())传给注入类,再使用 Component 一开始定义的接口就能完成依赖注入。注意,Component 中注入接口的参数必须为需要注入依赖的类型,不能是 Man 的父类或子类,注入接口返回值为 void,接口名可以任意。

接下来只需要在 Man 中调用injectMan方法就能完成注入。

public class Man {
    ...
    public Man() {
        DaggerManComponent.create().injectMan(this);
    }
    ...
}

Module

使用@Inject标注构造函数来提供依赖的对象实例的方法,不是万能的,在以下几种场景中无法使用:

  • 接口没有构造函数

  • 第三方库的类不能被标注

  • 构造函数中的参数必须配置

这时,就可以用@Provides标注的方法来提供依赖实例,方法的返回值就是依赖的对象实例,@Provides方法必须在Module中,Module 即用@Module标注的类。所以 Module 是提供依赖的对象实例的另一种方式。

@Module
public class CarModule {
    @Provides
    static Car provideCar() {
        return new Car();
    }
}

约定俗成的是@Provides方法一般以provide为前缀,Moudle 类以Module为后缀,一个 Module 类中可以有多个@Provides方法。

接下来,需要把可以提供依赖实例的 Module 告诉 Component:

@Component(modules = CarModule.class)
public interface ManComponent {

    void injectMan(Man man);  // 注入 man 所需要的依赖

}

build之后,Module 和 Component 生成的类为:

public final class CarModule_ProvideCarFactory implements Factory<Car> {
  private static final CarModule_ProvideCarFactory INSTANCE = new CarModule_ProvideCarFactory();

  @Override
  public Car get() {
    return Preconditions.checkNotNull(
        CarModule.provideCar(), "Cannot return null from a non-@Nullable @Provides method");
  }

  public static Factory<Car> create() {
    return INSTANCE;
  }

  /** Proxies {@link CarModule#provideCar()}. */
  public static Car proxyProvideCar() {
    return CarModule.provideCar();
  }
}

CarModule_ProvideCarFactory 和之前的 Car_Factory 类似,都实现 Factory<Car> 接口。

生成的 DaggerManComponent 和之前相比只改变了一个方法:

private void initialize(final Builder builder) {
    this.manMembersInjector = Man_MembersInjector.create(CarModule_ProvideCarFactory.create());
}

只是提供依赖实例的工厂变为了 CarModule 对应的工厂。

总结

现在再来看 Dagger 2 最核心的三个部分:

  1. 需要注入依赖的目标类,需要注入的实例属性由@Inject标注。

  2. 提供依赖对象实例的工厂,用@Inject标注构造函数或定义Module这两种方式都能提供依赖实例,Dagger 2 的注解处理器会在编译时生成相应的工厂类。Module的优先级比@Inject标注构造函数的高,意味着 Dagger 2 会先从 Module 寻找依赖实例。

  3. 把依赖实例工厂创建的实例注入到目标类中的 Component。

下面再讲述上面提到的在 Dagger 2 种几个注解的用法:

  • @Inject 一般情况下是标注成员属性和构造函数,标注的成员属性不能是private,Dagger 2 还支持方法注入,@Inject还可以标注方法。

  • @Provides 只能标注方法,必须在 Module 中。

  • @Module 用来标注 Module 类

  • @Component 只能标注接口或抽象类,声明的注入接口的参数类型必须和目标类一致。

推荐阅读:



作者:JohnnyShieh
链接:https://www.jianshu.com/p/26d9f99ea3bb
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
dagger2之android源码解析(dagger-compiler你在哪) 首先照常理来一份参考地址:Android - Dagger2使用详解,这里说的还行,但是并没有涉及到源码部分,如果没有像我这种纠结症的完全可以参考去使用。dagger这个我用的并不多(咱实话实话了,之前用了下,但是感觉好麻烦,我认为项目中没必要用到它),因为我现在在细品AAC里面的demo,GithubBrowserSample中有使用到,第一为了学习,第二别人家碗里的肉肯定都是香的,所以就有了这么一篇根据demo中案例捋一遍源码。 ... 阅读详情

相关推荐

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 569

Android开源框架--Dagger2详解

功名只向马上取,真是英雄一丈夫

袁震的博客 4712

数字IC后端实现之快速获取innovus中drv violation的所有net list

数字IC后端设计实现之快速获取innovus中drv violation的所有net list

weixin_37584728的博客 3349

Android 神兵利器Dagger2使用详解(一)基础使用

Android 神兵利器Dagger2使用详解(一)基础篇本系列书写原因:在公司一个新的共同开发项目中,使用到了Dagger2依赖注入,在使用它的时候,因为框架的原因产生了一些问题(代码风格的不同?),发现自己对于Dagger2还是有一些没有理解到位的地方,于是干脆抽个时间搞懂它,从最基础的使用开始,我们一点点从源码深入它,去感受依赖注入可以给代码开发带来怎样的魅力。1 什么是依赖注入依赖注入是一种

却把清梅嗅的博客 2万+

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2321

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 391

Dagger2 最清晰的使用教程

部分内容参考自: [Android]使用Dagger 2依赖注入 - DI介绍(翻译) [Android]使用Dagger 2依赖注入 - API(翻译)为什么网上这么多dagger2教程,我还写了这篇文章。 找了很多Dagger2相关的博客,我看的脑浆炸裂…… Dagger2给我们带来了什么,大多数博文也没有说明 手动写写,加深印象,骗骗粉丝 (手动滑稽) 部分Dagger2的运作机制是我个

Altsuki的博客 3040

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 678

Dagger2完全解析(二),进阶使用

Dagger 2 进阶使用 Dagger 2 完全解析(一),基本使用与原理 Dagger 2 完全解析(二), 进阶使用 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21版本 在Dagger 2 完全解析(一),基本使用与原理中介绍了 Dagger 2 基本使用,但是在实战中基本使用是远远不够的,我们还需要掌握一些其它的知识,下面由简入繁地讲...

xiaowu 专栏 1063

Spring Boot 集成 Spring AI:实现可被大模型调用的 MCP Server

本文介绍了如何利用Spring AI框架构建MCP Server,使大模型能够调用业务系统的接口。主要内容包括:1)MCP协议简介,分为MCP Server和Client两部分;2)环境配置要求,需Java 17+和Spring Boot 3.5.0+;3)实现步骤,通过@McpTool注解将Service方法暴露给大模型调用;4)使用Cherry Studio作为MCP Client测试效果,成功实现订单查询和下单功能。本文仅实现MCP Server部分,后续将介绍如何开发MCP Client。

iioSnail的博客 2125

RT-DETR改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 1544

Dagger2 的使用与基本原理

使用 Dagger2 的最佳做法:如果有可能,通过@Inject进行构造函数注入,以向 Dagger 图中添加类型。使用@Binds告知 Dagger 接口应采用哪种实现使用@Provides告知 Dagger 如何提供你的项目所不具备的类只能在组件中声明一次模块根据注释的使用生命周期,为作用域注释命名,例如和依赖注入。

tmacfrank 2019

2.2 保姆级教程:手把手带你构建第一个 LangGraph 应用

本文是一份保姆级教程,手把手教你构建第一个LangGraph应用——"智能工具助手"Agent。教程分为8个步骤:从环境准备到工具定义(使用Tavily搜索API和自定义计算器),再到定义图状态、创建决策节点和执行节点,最后连接工作流并编译运行。通过这个项目,你将学会如何让Agent智能选择工具(搜索或计算),掌握LangGraph开发的基本流程,为构建更复杂系统打下基础。关键点包括状态管理、节点设计和条件路由的实现。

yonggeit的博客 3116

Dagger 2 完全解析(一),基本使用与原理

Dagger 2 完全解析系列: Dagger 2 完全解析(一),Dagger 2 的基本使用与原理 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21版本 依赖注入 什么是依赖 依赖(Dependency) 是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义, 一般而言,依赖关系在语言中体现为局部变量、方法的形参,或者对静态方法的调用。...

xiaowu 专栏 2442

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Dagger 2 完全解析(三),Component与SubComponent

Dagger 2 Component 与 SubComponent Dagger 2 完全解析(一),基本使用与原理 Dagger 2 完全解析(二), 进阶使用 Dagger 2 完全解析(三), Component 与 SubComponent 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21版本 理解前面两篇文章后,可以使用 Dagge...

xiaowu 专栏 2977

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Dagger 2 完全解析(四),在Android中的使用

Dagger 2 完全解析(四),在Android中的使用 Dagger 2 完全解析(一),基本使用与原理 Dagger 2 完全解析(二),进阶使用 Dagger 2 完全解析(三), Component 与 SubComponent Dagger 2 完全解析(四),在Android中的使用 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21...

xiaowu 专栏 999

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Dagger2的基本使用

前言 Dagger2是一个依赖注入框架,我们经常用到的依赖注入框架还有ButterKnife。说到这里,首先了解一个概念:控制反转。 控制反转(又叫IOC:Inversion Of Control):是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection),还有一种方式叫“依赖查找”(Dependency Lo...

u010257931的博客 5844

Dagger2基本使用与原理

上一篇介绍了Dagger2的一些注解点击打开链接 一、Dagger2的一些简单配置 1.在build.gradle(project..)中添加apt插件 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 2.在build.gradle(Module:app)中添加如下代码,应用apt插件 apply plugin: 'c

fan_zyf的博客 9163

这可能是本年度最好用的 Dagger 使用教程 一(基本使用)

本文从一个例子入手,解释了依赖注入,和 Dagger 这个库的初步使用方式。

李斯维的博客空间 4672

Dagger2的简单使用及基本原理

前言    java注解除了解耦个人认为还有使代码简洁、逻辑更加突出业务逻辑代码、由于创建对象的集中,更加方便对象的维护与测试、对象的创建和生命周期的管控都交由框架等优点。 Dagger2的历史:   Dagger1是Square公司开发,Dagger2则由谷歌接收在dagger1的分支上开发而来,Dagger1用了反射,消耗了一些性能,Dagger2则被谷歌声称性能提高了13%,但是其灵活性减少 Dagger2的使用 添加依赖: implementation 'com.google.dagger:dagg

wangsheng5454的博客 4707

Dagger 2 原理和使用

Dagger2是一个编译时依赖注入框架,通过注解处理器在编译时生成依赖管理代码。其核心机制包括:@Inject标记依赖需求与提供者,@Module/@Provides定义依赖创建逻辑,@Component作为依赖提供与使用的桥梁。Dagger2的优势在于编译时验证依赖关系、无反射开销、代码可追溯性,并支持复杂依赖管理、模块化开发、测试优化等场景。在Android开发中特别适合处理生命周期绑定、作用域管理等平台特性,相比运行时DI框架具有显著的性能优势。

Mark Wu 的博客 1146

Dagger2原理解析

一、什么是Dagger2 Dagger2是Dagger的升级版,是一个依赖注入框架,现在由Google接手维护。 恩,这里有个关键字依赖注入,因此我们得先知道什么是依赖注入,才能更好的理解Dagger2。 依赖注入是面向对象编程的一种设计模式,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的。 举个例子:我们在写面向对象程序时,往往会用到组合,即在一个类中引用另一个类,从而可以调用引用的类的方法完成某些功能,就像下面这样. public class ClassA { ... Clas

分享Android开发知识 893

Android:Dagger2原理及使用详解(一)

目录 一:Dagger2是什么? 二:为什么要有Dagger2 三:Dagger2如何使用 基本的概念 如何使用Dagger2 高级用法 (1)构造方法需要其他参数时候 (2) 模块之间的依赖关系 (3) @Named注解使用 (4) @Singleton注解 (5)自定义Scoped (6)Subcomponent (7)lazy 和 Provider 四: ...

weixin_45258969的博客 1485

Dagger2的基础使用与原理

Dagger2的基础使用与原理Dagger2的基础使用与原理前言基础使用实现原理 Dagger2的基础使用与原理 前言 Dagger 2 是基于 Java Specification Request(JSR) 330标准。利用 JSR 注解在编译时生成代码,来注入实例完成依赖注入。 什么是依赖注入? 是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。 基础使用 1. Gradle配置 i

RingoPaul的博客 680

Dagger2基本使用1

这里发现不管是从@Inject注解到构造器上,还是通过@Privodes注解方法实现实例化类,都会创建多个对象,但是在项目中,有些类需要用到单利模式,那该怎么办呢,接下来就要用到Dagger2的作用域了,下面是作用域的讲解。我们在不是自己创建的类上无法在构造器上进行@Injec注解,那该怎么使用了,dagger提供了另一个注解方式@Module+@Provides实现,下面以Retrofit创建为例。Car 又是哪里来的呢,我们在Car的构造器上有@Inject,代码会帮我们创建对应对象,所以进一步为。

luck_xiang的博客 1235

Dagger 2 基本用法

1.Dagger2是什么? Dagger2是一个依赖注入(Dependency Injection)框架。 什么又是依赖注入呢? 借别人的话来说,就是“目标类中所依赖的其他类的初始化过程,不是通过在目标类中编码的方式完成,而是通过其他手段把已经初始化好的实例自动注入到目标类中”。 再换种方式来说,就是把类实例的初始化过程都挪至一个地方统一管理,具体需要哪个实例时,就从这个地方取出(注入到目标类中)。 他的主要作用,就是对象的管理,其目的是为了降低程序耦合。 2.基本的概念 我...

不是CC哥 2169
上一篇: Android Dagger2 MVP架构 一看就明白
下一篇: Dagger 2 完全解析(二),进阶使用 Lazy、Qualifier、Scope 等
candyguy242
博客等级 码龄17年 63粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值