When you create a bindings, you can also not give the target of the binding, which is typically used for a real class (concrete classes or type) that contains @implementedby and @providedby (described later). The purpose of untargeted bindings is to notify injector of a class type so injector can prepare a dependency beforehand. Untargetted bindings does not contain the to statement.
For example:
Bind
(myconcreteclass.class);
Bind (Anotherconcreteclass.class). in (Singleton.class);
However, if you need to use binding annotations at the same time, you need to add a target to the binding, even if you are bound to the same real class, such as:
Bind (Myconcreteclass.class)
. Annotatedwith (names.named ("foo"))
. to (Myconcreteclass.class);
Bind (Anotherconcreteclass.class)
. Annotatedwith (names.named ("foo"))
. to (Anotherconcreteclass.class)
. In (Singleton.class);