重要的是要承认,Dagger是在Guice之后由Guice的创作者之一(“Crazy Bob”Lee)创建的,他已经搬到了Square:
从这个意义上说,Guice的持续策划并不是“重新发明轮子”,而是维护一个长期运行和广泛使用的软件包,该软件包完全早于任何版本的Dagger。你可能会认为Dagger是Guice的精神继承者,但它只提供了Guice功能的优化子集。
要列出并修改上述差异,请执行以下操作:
- Spring是一个相对重量级的框架,具有许多集成,XML配置语言和运行时/反射绑定。已经使用Spring的应用程序可以使用Spring的依赖注入框架,而不需要额外的工作。
- Guice 是一个相对轻量级的框架,具有较少的集成、Java 实例配置和运行时/反射绑定。通过使用 Java 绑定,您可以获得编译时类型检查和 IDE 自动完成集成。
- Dagger是一个非常轻量级的框架,只有很少的集成,Java接口/注释配置和编译时代码生成的绑定。代码生成方面使Dagger总体上非常高性能,特别是在资源有限和移动环境中。(Android的虚拟机与服务器JRE的不同之处在于,反射速度特别慢,因此Dagger在这里特别有用。
- 上述所有三个框架都支持 JSR-330,因此精心设计的库或应用程序与所使用的 DI 容器基本不可知。
除此之外,请留意您使用的任何框架中的维护/弃用模式和策略。根据团队的知识和经验、对反射或运行时配置的需求以及对集成和运行时性能的需求,您可能会看到上述优势之一。也就是说,还有其他框架,因此请密切关注上述新选项和分支。