Guice provides support for dependency injection using annotations to
configure Java objects. Dependency injection is a design pattern whose
core principle is to separate behavior from dependency resolution.
Guice allows implementation classes to be programmatically bound to
an interface, then injected into constructors, methods or fields
using an @Inject annotation. When more than one implementation of
the same interface is needed, the user can create custom annotations
that identify an implementation, then use that annotation when