暧昧的机器人腿是否有效?

时间:2011-03-18 15:13:17

标签: dependency-injection annotations guice robot-legs-problem

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

我的问题:我可以在没有注释的情况下将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(..)的使用被认为是不好的形式?只是试图避免创建大量的注释类,但希望能够重构的好处。

1 个答案:

答案 0 :(得分:1)

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

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