gpt4 book ai didi

android - Transfuse 与 Dagger 相比如何?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:34:51 26 4
gpt4 key购买 nike

我正在尝试决定是使用 Transfuse 还是 Dagger 进行 Android 依赖项注入(inject)。我从未使用过 Transfuse,并且对 Dagger 有基本的了解。非常感谢。

最佳答案

首先,我是 Transfuse 的主要作者因此这个答案可能有点偏向那个方向。

Transfuse 和 Dagger 都以类似的方式处理 Android 的依赖注入(inject)/控制反转。两者都在编译时通过 JSR269 使用注释处理生成支持 DI/IOC 功能的代码。这使他们能够避免通常与非 Android Java 中发现的 DI 容器相关的昂贵的基于运行时反射的分析。不谈细节,Dagger 和 Transfuse 确实以截然不同的方式处理代码生成,这反射(reflect)在库的特性中。此外,Transfuse 和 Dagger 都使用通用的 JSR330注解(@Inject、Provider 等)。这意味着它们都遵循 Guice 风格的注入(inject)方案。

以下是在 Dagger 中创建对象图的方法:

public class DaggerActivity extends Activity {

@Inject Example example;

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ObjectGraph.create().inject(this);
//do something else...
}
}

Transfuse 中的等效代码使用其@Factory 功能:

@Factory
public interface Injector {
Example get();
}

public class TransfuseActivity extends Activity {

Example example;

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
example = Factories.get(Injector.class).get();
//do something else...
}
}

Transfuse 旨在以下列方式使用,但是,利用 POJO 组件、生命周期事件等:

@Activity
public class TransfuseActivity{

@Inject Example example;

@OnCreate public void doSomethingElse(){
//do something else...
}
}

以下是 Transfuse 和 Dagger 中 DI 引擎的一些小差异:

  1. Transfuse 支持(以及它所能做的)循环依赖,Dagger 在这种情况下有意抛出异常。
  2. Transfuse 满足 JSR330,但 Dagger 特别不满足。 Dagger 开发人员想要在简单性方面犯错,避免方法注入(inject)让他们避免了一些令人困惑的情况 (link)。
  3. 对于未生成代码的情况,Dagger 有一个基于反射的引擎。 Transfuse 不需要并且需要生成代码(运行注释处理器)才能工作。
  4. Transfuse 将注入(inject)私有(private)字段、构造函数、方法(由于反射开销,不一定推荐)。在这种情况下,Dagger 会抛出异常。
  5. Dagger 以非常直接的方式使用模块,反射(reflect)了 Guice 的功能。每次创建对象图时,您都可以选择使用模块类对其进行配置,即:ObjectGraph.create(new DripCoffeeModule())。 Transfuse 的配置模块有点不同,因为它是在编译时合并到应用程序中的。 Transfuse 中的每个模块对于项目都是全局的(这可能会在 Transfuse 的 future 版本中发生变化,但这对于使用 Transfuse 来说还不是问题)。
  6. Dagger 中的单例是每个对象图,而 Transfuse 中的单例对应用程序是全局的。

Dagger 和 Transfuse 的最大区别在于 Dagger 专注于成为一个简单的依赖注入(inject)库,而 Transfuse 的重点是“make Android a better API using performance sensitive techniques

Transfuse 支持这些功能以及 DI:

  1. POJO 组件
  2. list 管理
  3. Roboguice/Butterknife 式注入(inject)
  4. 轻量级事件系统(@Observes、@OnCreate 等)
  5. AOP

如果您有兴趣,我建议您试试 Transfuse。就个人而言,我很想听听您将它与 Dagger 进行对比的体验。我们有一个 mailing list您可以在这里与社区分享并通过 documentation 进行漂亮的分享在网站上。

关于android - Transfuse 与 Dagger 相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com