首页 文章

当你拥有Spring和Dagger时,为什么要使用/开发Guice? [关闭]

提问于
浏览
38

据我所知,Dagger确实生成了代码,而Guice和Spring依赖于运行时处理,因此Dagger的工作速度更快,但需要在程序员方面做更多的工作 . 由于性能优势,它对移动(Android)开发很有好处 .

然而,当我们离开Guice和Spring时,后者有很多集成 . 如果我们可以使用Spring Framework(基本上做同样的事情,但提供更简单的数据库访问),那么开发/使用Guice有什么意义呢?

谷歌是不是试图通过创建自己的DI工具来重新发明轮子,而不是使用(并可能有助于)Spring Framework?

我正在寻找决策树,通过选择DI工具来指导 .

1 回答

  • 108

    它是's important to realize that Dagger was created after Guice, by one of Guice'的创作者("Crazy Bob" Lee)曾搬到广场:

    • Spring最初发布于October 2002 .

    • Google最初在March 2007公开发布了Guice .
      October 2009中,309 JSR-330正式化了 javax.inject 注释,其中包括来自Google(Bob Lee),Spring和其他行业参与者的大量投入 .

    • Square最初在May 2013公开发布了Dagger 1 .

    • Google最初在April 2015公开发布了Dagger 2 .

    • Square将Dagger 1标记为在提出此问题前10天已弃用,在September 15, 2016上 .

    从这个意义上说,Guice的持续策展不仅仅是对长期运行且广泛使用的软件包的维护,而是远远超过任何版本的Dagger . 您可能会认为Dagger是Guice的精神继承者,但只提供Guice功能的优化子集 .

    列出并修改您上面的差异:

    • Spring是一个相对重量级的框架,具有许多集成,XML配置语言和运行时/反射绑定 . 已经使用Spring的应用程序可以使用Spring的依赖注入框架,只需要很少的额外工作 .

    • Guice是一个相对轻量级的框架,具有较少的集成,Java实例配置和运行时/反射绑定 . 通过使用Java绑定,您可以获得编译时类型检查和IDE自动完成集成 .

    • Dagger是一个非常轻量级的框架,只有很少的集成,Java接口/注释配置和编译时代码生成的绑定 . 代码生成方面使得Dagger整体上非常高效,特别是在资源有限和移动环境中 . (Android的VM与服务器JRE的区别在于反射速度特别慢,所以Dagger在这里特别有用 . )

    • 上述所有三个框架都支持JSR-330,因此精心设计的库或应用程序可能与所使用的DI容器无关 .

    除此之外,请密切关注您使用的任何框架中的维护/弃用模式和策略 . 根据您的团队的知识和经验,您对反射或运行时配置的需求,以及您对集成和运行时性能的需求,您可能会看到以上其中一项脱颖而出 . 也就是说,还有其他框架,所以要留意上面的新选项和分叉 .

相关问题