Допустимы ли двусмысленные ножки робота?

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

Мой вопрос: могу ли я привязать 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 ответ

Решение

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

public class CompositeSecurityAuthorizer {
    @Inject 
    CompositeSecurityAuthorizer(Set<SecurityAuthorizer> authorizers) {
        ...
    }
}
Другие вопросы по тегам