在运行时使用注释获取 guice 对象?

Getting a guice object at runtime with an annotation?

我有供应商:

@SuppressWarnings({ "rawtypes", "unchecked" })
@Provides
@Singleton
@OutboundBroker
public EventBroker outboundBrokerProvider()

在运行时,我想要这个。

        EventBroker outbound=injector.getInstance(Key.get(EventBroker.class, Names.named("OutboundBroker")));

但是,此代码不起作用 -- 提供程序未命名,但我不知道如何使用注释 @OutboundBroker

检索它
Key.get(EventBroker.class, OutboundBroker.class)

需要从 Injector 中获取多个对象的情况极为罕见。如果您使用纯 dependency-injection,您的 main() 方法(或您的容器)会创建注入器并获取一个对象,然后调用该对象上的一个或多个方法。一个对象将被注入它需要的东西。

所以你可以这样做:

class EventService {
  private final EventBroker outboundEventBroker;

  @Inject
  private EventService(
      @OutboundBroker EventBroker outboundBroker) {
    this.outboundEventBroker = outboundBroker;
  }


  ...
}

正如 Jeff Bowman 所说,这假设 OutboundBroker 本身用 @BindingAnnotation 注释。