Guice和Dagger都是Java的依赖注入框架,他们有很多相似性,所以放到一起比较一下:
- 相同点:
- 基于Java
- 由Google维护(Dagger最早是Square开发的,Dagger2已经过继给了Google)
- 兼容JSR-330注解规范
- 因为兼容JSR-330,所以需要修改源码添加注解实现注入,相对于Spring通过外部配置文件的方式对源码有侵入性
- 不同点
- Guice历史更悠久,早在JSR-330之前就诞生并影响了JSR-330标准的制定,Dagger是在JSR-330之后出现的
- Guice在运行时通过反射创建依赖;Dagger在编译期提前生成依赖创建的代码
- Dagger比较适合在Android上使用,因为移动平台对性能更敏感,希望反射越少越好
- Dagger的API更简单,stacetrace更友好
通过对比可见,最主要区别在于Guice的依赖注入是Runtime完成的,而Dagger是CompileTime完成了大部分工作