gpt4 book ai didi

java - 当您拥有 Spring 和 Dagger 时,为什么要使用/开发 Guice?

转载 作者:IT老高 更新时间:2023-10-28 13:03:48 33 4
gpt4 key购买 nike

据我所知,Dagger 确实会生成代码,而 Guice 和 Spring 依赖于运行时处理,因此 Dagger 运行速度更快,但需要程序员方面的更多工作。由于性能优势,它非常适合移动 (Android) 开发。

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

Google 不是在尝试通过创建自己的 DI 工具来重新发明轮子,而不是使用(并可能为 Spring Framework 做出贡献)吗?

我正在寻找可以指导选择 DI 工具的决策树。

最佳答案

重要的是要承认 Dagger 是在 Guice 之后由 Guice 的一位创建者 ("Crazy Bob" Lee ) 搬到 Square 的:

  • Rod Johnson最初在 October 2002 中发布 Spring与他的书专家一对一 J2EE 设计和开发; Spring 随后于 2003 年 6 月在 Apache 许可证上公开发布,并在 March 2004 中作为 v1.0 发布。 .
  • Google 最初在 March 2007 中公开发布了 Guice .
  • JSR-330 October 2009 中的形式化 javax.inject 注释,由 Google (Bob Lee) 和 SpringSource (Rod Johnson) 及其专家组的其他行业合作者提交。
  • Square 最初在 May 2013 中公开发布 Dagger 1 .
  • Google 最初在 April 2015 中公开发布了 Dagger 2 .
  • September 15, 2016 提出此问题前 10 天,方将 Dagger 1 标记为已弃用.

从这个意义上说,Guice 的持续管理与其说是“重新发明轮子”,不如说是维护一个长期运行且广泛使用的软件包,该软件包彻底早于任何版本的 Dagger。您可能会认为 Dagger 是 Guice 的精神继承者,但它只提供 Guice 功能的优化子集

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

  • Spring 是一个相对重量级的框架,具有大量集成、XML 配置语言和运行时/反射绑定(bind)。已经使用 Spring 的应用程序可以使用 Spring 的依赖注入(inject)框架,只需很少的额外工作。
  • Guice 是一个相对轻量级的框架,具有较少的集成、Java 实例配置和运行时/反射绑定(bind)。通过使用 Java 绑定(bind),您可以获得编译时类型检查和 IDE 自动完成集成。
  • Dagger 是一个非常轻量级的框架,具有极少的集成、Java 接口(interface)/注解配置和编译时代码生成的绑定(bind)。代码生成方面使 Dagger 整体性能非常好,尤其是在资源有限和移动环境中。 (Android 的 VM 与服务器 JRE 的不同之处在于反射特别慢,因此 Dagger 在这里特别有用。)
  • 上述所有三个框架都支持 JSR-330,因此精心设计的库或应用程序几乎可以与所使用的 DI 容器无关。

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

关于java - 当您拥有 Spring 和 Dagger 时,为什么要使用/开发 Guice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688830/

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