Java 访问地图<;字符串,接口Impl>;在Guice的根对象图中不可配置

Java 访问地图<;字符串,接口Impl>;在Guice的根对象图中不可配置,java,spring,dependency-injection,guice,Java,Spring,Dependency Injection,Guice,我想知道下面的Spring用法的等价物是什么 @Autowired Map<String,KeyWordExecutor> keyWordExecutors; 基于SPRING的代码 Class StandardRuleExecutor implements RuleExecutor { @Autowired Map<String,KeyWordExecutor> keyWordExectors; @Override public vo

我想知道下面的Spring用法的等价物是什么

@Autowired
Map<String,KeyWordExecutor> keyWordExecutors;
基于SPRING的代码

Class StandardRuleExecutor implements RuleExecutor
{
    @Autowired
    Map<String,KeyWordExecutor> keyWordExectors;

    @Override
    public void execute(List<String> rules)
    {
        int val = 0;
        foreach(String rule : rules)
        {
            String keyword = getKeyWord(rule);
            val = keyWordExecutors.get(keyword).execute(val, rule)
        }
    }
}

Class ApplicationLauncher
{
    public static void main(String[] args)
    {
        ApplicationContext context = new FileSystemApplicationContext("bindings.xml");
        RuleExecutor ruleExecutor = context.getBean("executor");
        ruleExecutor.execute(args);
    }
}
这正是我们的目的。从您的帖子中,似乎Spring方式要简单得多,但Spring方式也有一个大的xml文件,这一步很方便:)

在Guice中,您可以执行以下操作:

@Override
protected void configure() {
    bind(RuleExector.class).to(StandardRuleExecutor.class); // Don't forget this one :)

    MapBinder mb = MapBinder.newMapBinder(binder(), String.class, KeyWordExecutor.class);
    mb.addBinding("foo").to(FooKeyWordExecutor.class);
    mb.addBinding("bar").to(BarKeyWordExecutor.class);
    // etc.
}
那么就做:

class StandardRuleExecutor implements RuleExecutor {
    @Inject Map<String, KeyWordExecutor> keyWordExectors;

    // The rest of your code is the same
}
类StandardRuleExecutor实现RuleExecutor{
@注入Map关键字执行器;
//代码的其余部分是相同的
}

你看了吗?你的帖子很少被关注的一个原因是你没有标记java。。。通过不标记Java,您将获得更少的视图。很抱歉延迟响应。正是我想要的。非常感谢。
@Override
protected void configure() {
    bind(RuleExector.class).to(StandardRuleExecutor.class); // Don't forget this one :)

    MapBinder mb = MapBinder.newMapBinder(binder(), String.class, KeyWordExecutor.class);
    mb.addBinding("foo").to(FooKeyWordExecutor.class);
    mb.addBinding("bar").to(BarKeyWordExecutor.class);
    // etc.
}
class StandardRuleExecutor implements RuleExecutor {
    @Inject Map<String, KeyWordExecutor> keyWordExectors;

    // The rest of your code is the same
}