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

时间:2015-12-19 01:28:42

标签: java dependency-injection guice

我有一个提供者:

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

在运行时,我想得到这个。

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

但是,此代码不起作用 - 提供程序未命名,但我无法弄清楚如何使用注释@OutboundBroker检索它

2 个答案:

答案 0 :(得分:3)

Key.get(EventBroker.class, OutboundBroker.class)

答案 1 :(得分:0)

极少需要从Injector获取多个对象。如果使用纯依赖注入,则main()方法(或容器)会创建注入器并获取一个对象,并调用该对象上的一个或多个方法。这一个对象将被注入所需的内容。

所以你可以这样做:

class EventService {
  private final EventBroker outboundEventBroker;

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


  ...
}

正如Jeff Bowman所说,这假定OutboundBroker本身已注明@BindingAnnotation