简体   繁体   English

在Guice中绑定HashMap实例

[英]Binding A HashMap Instance In Guice

I have a method that returns a Map(): 我有一个返回Map()的方法:

private Map<String, Catalog> readCatalogFromXml(String xmlFile) {
    // blah blah read XML via DOM
}

However, I need to bind the results of that call to a single instance to be injected into multiple classes. 但是,我需要将该调用的结果绑定到单个实例,以注入到多个类中。 I've been looking over the docs for MapBinder but am confused. 我一直在寻找MapBinder的文档,但感到困惑。 I'm probably missing something simple, can anyone assist? 我可能缺少简单的东西,有人可以协助吗?

Jason 杰森

Just implement a provider in your Module class: 只需在Module类中实现提供程序:

public class ModuleImpl extends AbstractModule {
    @Override
    protected void configure() {
        // bind whatever needed
    }

    @Singleton
    @Provides
    Map<String, Catalog> provideMap(@XMLFile String xmlFile) {
        // create an instance of your class
        return myClass.readCatalogFromXml(xmlFile);
    }
}

If you just need the returned Map injected, I would ... 如果您只需要注入返回的Map,我将...

  1. define a subclass "@Singleton public class MyInjectedMap extends HashMap { }" 定义一个子类“ @Singleton公共类MyInjectedMap扩展了HashMap {}”
  2. bind a Provider < MyInjectedMap > to produce instances 绑定提供者<MyInjectedMap>以产生实例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM