logo

Dagger vs Guice

Dependency Injection is a widely used design pattern. In Java world, @Inject is the new new. Besides the Spring Framework, there are some light weight alternatives. Interestingly Google alone open sourced 2 of the popular frameworks: Guice and Dagger(Well, Dagger was created by Square, but later forked by Google and became Dagger 2. Dagger 1 is marked as deprecated by Square). So what are the differences between the two?

The key difference is that Guice is dependency injection at runtime, while Dagger is at compile time. This leads to the following comparisons:

  • Guice is base on reflection, while Dagger is generating extra code during compile-time; reflection is much slower than the pre-generated code.
  • Dagger is often used in Android development(reflection is even slower in Android)
  • Dagger has simpler APIs, and the stacktrace is easier to understand.
  • Both supports JSR-330(i.e. javax.inject). Guice was created before JSR-330 and heavily influenced the JSR; Dagger was created several years after JSR-330.