0

Guice FAQ中,他们讨论了使用注释区分多个实例(有点)。

我的问题:我可以将 Impl 绑定到没有注释的接口,并将另一个 Impl 绑定到具有注释的同一个接口?基本上,我的第一个 impl 将充当其他 impl 的容器。

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

额外的问题,我们对 Names.named(..) 的使用是否被认为是错误的形式?只是试图避免创建大量注释类,但又想要能够重构的好处。

4

1 回答 1

1

是的,这应该只是工作。您可能还想查看Multibindings,它专为此类场景而设计。复合实现将注入一组接口:

public class CompositeSecurityAuthorizer {
    @Inject 
    CompositeSecurityAuthorizer(Set<SecurityAuthorizer> authorizers) {
        ...
    }
}
于 2011-03-18T16:26:21.573 回答