В документации Guice есть пример нецелевого связывания как:
bind(MyConcreteClass.class) .annotatedWith(Names.named("foo")) .to(MyConcreteClass.class);
Может ли кто-нибудь объяснить простым языком, что именно это делает и почему вы хотите это сделать?
Создается привязка типа MyConcreteClass с аннотацией @Named("foo") с использованием класса реализации MyConcreteClass. Вы бы сделали это, если хотите ввести этот тип:
MyConcreteClass
@Named("foo")
@Inject public Bar(@Named("foo") MyConcreteClass object) { ... }