Допустимы ли двусмысленные ножки робота? - PullRequest
0 голосов
/ 18 марта 2011

В Guice FAQ они говорят о различении нескольких экземпляров с помощью аннотаций (вроде).

Мой вопрос: можно ли привязать Impl к интерфейсу без аннотации и связать другой Impl с тем же интерфейсом с помощью аннотации?По сути, мой первый импл будет действовать как контейнер для остальных.

bind(SecurityAuthorizer.class).to(CompositeSecurityAuthorizer.class);
bind(SecurityAuthorizer.class)
    .annotatedWith(Names.named(ComponentAuthorizer.class.getSimpleName()))
    .to(ComponentAuthorizer.class).in(Singleton.class);

Бонусный вопрос, считается ли использование Names.name (..) плохой формой?Просто пытался избежать создания множества классов аннотаций, но хотел иметь возможность рефакторинга.

1 Ответ

1 голос
/ 18 марта 2011

Да, это должно просто работать.Возможно, вы также захотите взглянуть на Multibindings , который разработан для таких сценариев, как этот.Составная реализация будет внедрять набор интерфейсов:

public class CompositeSecurityAuthorizer {
    @Inject 
    CompositeSecurityAuthorizer(Set<SecurityAuthorizer> authorizers) {
        ...
    }
}
...