Java依赖注入:Dagger 1 vs Dagger 2,哪个更好?

Ogn*_*yan 22 java android dependency-injection dagger dagger-2

Dagger 2Dagger 1有什么优势?

到目前为止我发现(只)2:

  • Dagger 2允许您使用proguard进行代码混淆
  • Dagger 2更快(这对于Android应用程序使用时没有多大优势,但如果你将它用于某种服务器,这肯定是一件很重要的事情)

与此同时,我发现了一个很大的缺点:你不能@Module(overrides = true)在Dagger 2中使用模块覆盖(),这至少对我来说很烦人 - 它对于单元测试非常有用.

还有其他优点/缺点吗?

sna*_*109 20

https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/http://google.github.io/dagger/dagger-1获取的一些优点和缺点-migration.html:

Dagger 2的优点:

  • 没有更多的反思 - 一切都是作为具体的电话完成的(ProGuard完全没有配置)
  • 不再有运行时图形组合 - 提高性能,包括每个请求案例
  • 可跟踪 - 更好的生成代码和无反射有助于使代码可读且易于遵循
  • 除了字段和构造函数注入之外,还支持方法注入,这是Dagger 1支持的唯一两种类型
  • 模块比Dagger 1需要更少的配置
  • 允许用户使用任何格式良好的范围注释.Dagger 1仅支持单个范围:@Singleton.

缺点:

  • inject()方法现在与注射目标具有强类型关联.这对于调试很有用,但它使从基类注入的常见做法变得复杂(例如基本活动,片段等).
  • 组件实现需要重建项目才能出现,任何与注入相关的编译错误都会导致类消失(即不生成).
  • 不支持overrides.覆盖简单测试假货的模块可以创建模块的子类来模拟该行为.应该分解使用覆盖并依赖依赖注入的模块,以便将覆盖模块表示为两个模块之间的选择.

编辑2016/11/16:这不是技术优势,但Dagger 1现已弃用(截至2016年9月15日),将不再积极开发.他们建议迁移到Dagger 2.