【问题标题】:Dagger2 initialization of componentsDagger2 组件的初始化
【发布时间】:2020-02-11 12:07:00
【问题描述】:

我正在使用 dagger 实现依赖注入;

并使用注入的classObject如下,

CarComponent carComponent = DaggerCarComponent.create();
car=carComponent.getCar();

现在查询是,

  1. 就像我们在 Spring 中所做的那样,通过将 @Service/@Component 添加到类中,我们不需要显式调用某些东西来初始化这个对象(如 DaggerCarComponent.create()) Spring 会注意初始化这个服务对象以在 App 上下文中注册。
  2. 在消费者类中,我们是否每次都需要调用DaggerCarComponent.create().getCar() 来获取汽车对象?还有其他方法吗?

【问题讨论】:

  • 你在哪个项目中使用 Dagger2 是你的 spring 项目吗?还是 Android 项目?
  • @MuhammadFarhan 我在 android 项目中使用 dagger 2。

标签: java android spring dagger-2 dagger


【解决方案1】:

Dagger-2 提供特定于 Android 的支持,我们通常使用它来避免编写大量样板代码。更多依赖here.

回答 1
我对 Spring 不太熟悉,但是在 Android 中使用 dagger2 时,我们需要提供一种方法来构造主组件中的所有依赖项。如果我们拥有这个类,我们通常会进行构造函数注入,然后提供一个配置方法来获取我们的类对象。如果我们不拥有该类,那么我们需要创建 @Moduels@Provides 它们的实现,然后将该模块添加到我们的组件中,以便我们的组件可以使用它们并在需要时提供它们。

答案 2
从不在每个类中启动组件,如果您在每个消费者类中创建一个组件,那么您的基本上做的是在每个消费者类中创建一个完整的单独的依赖项集,这将浪费内存,因为如果消费者类只有一个依赖项,那么我们将提供所有依赖项而不是只提供该依赖项

我们通常会在 Application 类中启动 Component,因为它只在 App 启动时构建一次,并使用 Scopes 来提供生命以及我们需要特定对象的位置。

对于 Dagger-2 的核心概念,我建议你这个Tutorial

对于 Dagger-2 Android 支持我建议你这个Tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 2019-12-15
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多