#java #guice
#java #guice
Вопрос:
Я пытаюсь внедрить карту, которая инициализируется с использованием определенных статических констант в моем классе.
Однако я не могу продолжить, поскольку я новичок в Guice, и я не совсем уверен, как я могу использовать эту карту? Карта, которую я хочу внедрить, это:
Карта> myMap в MyClass.
Я написал класс для MyInjectedMap, содержащий myMap, где он также будет создан. Я написал модуль и привязал к нему этот класс. Но это не работает.
public class MyInjectedMap {
private Map<String, List<String>> MyMap = new HashMap<>();
private List<String> data = Arrays.asList("abc");
}
Я хочу заполнить myMap списком массива данных, который я создал.
Я хочу спросить, какой метод должен быть написан в этом классе, чтобы он предоставлял мне myMap для внедрения?
Комментарии:
1. Если вы используете Guice только для достижения внедрения, найдите java.lang.reflect , он предоставляет #set для всех полей
Ответ №1:
Вы захотите преобразовать MyInjectedMap в provider, а затем соответствующим образом привязать его к вашему модулю. Предполагая, что вам не нужна эта карта для ВСЕХ карт, вы собираетесь либо создать пользовательскую аннотацию, либо использовать @Named, предоставленный guice:
public class MyMapProvider implements Provider<Map<String,List<String>> {
private Map<String,List<String>> myMap = new HashMap<>();
public Map<String,List<String>> get() {
return myMap;
}
}
И настройте инжектор:
bind(new TypeLiteral<Map<String,List<String>>>(){}).annotatedWith(Names.named("MyMap")).toProvider(MyMapProvider.class);
А затем внедрить ее:
@Inject @Named("MyMap") Map<String,List<String>> myMap;