【问题标题】:Guice iterating over multiple bindingsGuice 迭代多个绑定
【发布时间】:2013-05-17 18:52:40
【问题描述】:

如果我有一个接口 IBaseFunction 和这个接口的多个实现。 如何遍历绑定调用每个即方法的绑定

public class MyModule extends AbstractModule {
  @Override 
  protected void configure() {

bind( IBaseFunction.class).annotatedWith( ExDelete.class).to( ExDeleteFunction.class);
bind( IBaseFunction.class).annotatedWith( ExAdd.class).to( ExAddFunction.class);
...

  }
}

我需要在每个绑定上调用一个函数 'publish()(使处理程序在总线上可用)

我可以像这样单独调用每个绑定上的函数:-

ExDeleteFunction functionExDelete = injector.getInstance( ExDeleteFunction.class);
ExDeleteFunction.publish();
ExAddFunction functionExAdd = injector.getInstance( ExAddFunction.class);
ExAddFunction.publish();

但是我想做的是遍历这些并在所有这些上调用“发布”函数,有没有办法做到这一点? 也许使用 injector.getAllBindings() ?像这样的东西:-

  Injector injector = Guice.createInjector( new ServicesModule() );

  Map<Key<?>, Binding<?>> bindings = injector.getAllBindings();
  for (Binding<?> binding : bindings.values()) {
      Key<?> key = binding.getKey();
...??

或者有没有更简单的方法?

【问题讨论】:

    标签: java binding guice


    【解决方案1】:

    是的,有一个更简单的方法,称为Multibindings。有了这个,你将能够做类似的事情

    public class BaseFunctionsModule extends AbstractModule {
        @Override
        public void configure() {
            Multibinder<BaseFunction> multibinder = Multibinder.newSetBinder(binder(), BaseFunction.class);
            mapBinder.addBinding().to(ExDeleteFunction.class);
            mapBinder.addBinding().to(ExAddFunction.class);
            // others
        }
    }
    
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new BaseFunctionsModule());
        Set<BaseFunction> functions = injector.getInstance(new TypeLiteral<Set<BaseFunction>>() {});
        for (BaseFunction function : functions) {
            function.publish();
        }
    }
    

    但是,这种方式可能无法单独注入你的函数(我不知道,你需要测试一下);你也可以看看MapBinder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多