Инициализация mapbinder с картой в подсказке - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь внедрить карту как боб в один из моих классов (Helper.java).Я планирую создать эту карту в HelperModule, где я связал Helper.java.

Я считаю, что для добавления карты в виде боба мне нужно использовать MapBinder.А затем заполните все привязки в binderOfMap и затем в конечном итоге используйте карту в моем классе.

public class HelperModule extends AbstractModule {

    @Override
    protected void configure() {
        log.info("Configuring the helper module.");
        configureHelper();

        final MapBinder<String, String> binderOfMap =
                MapBinder.newMapBinder(binder(), new TypeLiteral<String> () {},
                        new TypeLiteral<String>() {},
                        Names.named("CustomMap"));

                Map<String, String> myFieldsMap = 
                           myDependency.getCustomMap(SomeConstants);

        for (Map.Entry<String, String> entry: myFieldsMap.entrySet()) {
          binderOfMap.addBinding(entry.getKey()).toInstance(entry.getValue());
        }

    private void configureHelper() {
        bind(Helper.class).in(Scopes.SINGLETON);
    }
}

Должен ли я перебирать весь myFieldsMap, чтобы добавить к binderOfMap?Или есть ли способ инициализировать binderOfMap с помощью myFieldsMap?

Кроме того, могу ли я теперь напрямую добавить Map<String,String> с помощью @Named аннотации ("CustomMap") в моем классе?

1 Ответ

1 голос
/ 24 мая 2019

Согласно документации MapBinder , только метод addBinding добавляет новую запись на карту и принимает один ключ за раз.

Для итерации по myFieldsMapВы можете использовать потоки, например,

myFieldsMap.forEach((key, value) -> binderOfMap.addBinding(key).toInstance(value));

Helper конструктор может выглядеть следующим образом

@Inject
public Helper(@Named("CustomMap") Map<String, String> map) {...}

TypeLiteral представляет универсальный тип T, для вашего случая выможно просто использовать

MapBinder.newMapBinder(binder(), String.class, String.class, Names.named("CustomMap"));
...