IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Dagger2 使用入门 -> 正文阅读

[移动开发]Dagger2 使用入门

一、Dagger2是什么

? ? ? ? Dagger2是现在由Google维护的一套依赖项注入框架,那什么是依赖注入呢?引用Google的话:

类通常需要引用其他类。例如,Car?类可能需要引用?Engine?类。这些必需类称为依赖项,在此示例中,Car?类依赖于拥有?Engine?类的一个实例才能运行。

类可通过以下三种方式获取所需的对象:

  1. 类构造其所需的依赖项。在以上示例中,Car?将创建并初始化自己的?Engine?实例。
  2. 从其他地方抓取。某些 Android API(如?Context?getter 和?getSystemService())的工作原理便是如此。
  3. 以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函数。在以上示例中,Car?构造函数将接收?Engine?作为参数。

第三种方式就是依赖项注入!使用这种方法,您可以获取并提供类的依赖项,而不必让类实例自行获取。

? ? ? 举个例子:

class Car {

    private final Engine engine;

    public Car(Engine engine) {
        this.engine = engine;
    }

    public void start() {
        engine.start();
    }
}

class MyApp {
    public static void main(String[] args) {
        Engine engine = new Engine();
        Car car = new Car(engine);//可以看到Car在构造的时候,注入了engine
        car.start();
    }
}

目前Android中,其实也是java中,有两种主要的依赖项注入方式:

  • 构造函数注入。这就是上面描述的方式。您将某个类的依赖项传入其构造函数。

  • 字段注入(或 setter 注入)。某些 Android 框架类(如 Activity 和 Fragment)由系统实例化,因此无法进行构造函数注入。使用字段注入时,依赖项将在创建类后实例化

二、Dagger中常用Api及其作用了解

@Inject ?//用来告知Dagger,如何构造一个类

  
    @Inject
    public A(B b, C c) {
        this.b= b;
        this.c= c;
    }

在上面的代码段中,我们告诉?Dagger:

  1. 如何使用带有?@Inject?注释的构造函数创建 A实例。

  2. 它的依赖项为:B和?C

接下来我们需要告知Dagger怎么创建依赖项B和C:

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

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

@Component? ? //用来绘制我们添加@Inject的对象的逻辑关系图,这样Dagger就可以我们生产实现依赖关系的代码了

@Component
public interface ApplicationComponent {
  
    A callA();

}

rebuild之后,代码已经生成了,我们使用A怎么使用呢?

ApplicationComponent application = DaggerApplicationComponent.create();
A a = application.callA();

未完。。。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:52:17  更:2021-11-17 12:52:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:31:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码