Dagger 和 Dagger 2.0 有什么区别?

What is the difference between Dagger and Dagger 2.0?

Dagger 和 Dagger 2.0 有什么区别,为什么 Google 决定 fork 现有项目?

Dagger 2 presentation

中的一些引述

匕首 1 的问题:

  • 生成的代码难看
  • 运行时图组成
  • 图表创建效率低下
  • 部分可追溯性
  • 类似地图API

匕首2解决方案:

  • 整个
  • 的编译时验证
  • 调试方便;提供 的完全具体的调用堆栈 创作
  • 完全可追溯
  • POJO API
  • 性能

匕首 2 问题:

  • 不太灵活
  • 没有活力
  • 没有来自 Guice 的自动迁移路径

匕首 1.0

  • 一些反射 API 用于代码生成。
  • 反射很慢。
  • 编译时不捕获异常。

匕首 2.0

  • 在构建时使用注释处理器生成代码。
  • 注释处理器速度很快。
  • 仅在编译时捕获异常。

Dagger1.x:是Square创建的运行时依赖注入框架。这是在运行时连接依赖项的基于反射的解决方案。现在它已被弃用,取而代之的是 Google 的 Dagger2。

有用的链接:
https://github.com/square/dagger
https://square.github.io/dagger/

一些缺点是:

  • 使用慢反射API,在Android
  • 中更慢
  • 性能开销
  • 更少的可追溯性和运行时图组成

Dagger2.x:它是对 Square 创建的早期版本的改编,现在由 Google 维护。 Dagger2 是编译时依赖注入框架,在编译时生成代码连接依赖。

Dagger2 的优点:

  • 不再反射API
  • 更好地生成手写代码,因此更可追溯。
  • 性能提升比 Dagger1 快近 10 倍。
  • 需要更少的模块配置

Dagger2 的一些有用链接:
https://github.com/google/dagger
https://dagger.dev/

如果您仍在使用 dagger1,这里是从 dagger1 到 dagger2 的迁移指南https://dagger.dev/dev-guide/dagger-1-migration.html