Ответ 1
Похоже, что у вас есть карта, и вы хотите использовать что-то, что автоматически связывает их с именованными строками. Вы не можете сделать это автоматически в кинжале, как можете в Guice, так как в Guice вы можете создать связующее свойство.
Кинжал требует знания всех ваших привязок во время компиляции, чтобы выполнить анализ, чтобы убедиться, что все привязки и зависимости выполнены
Тем не менее, вы можете сделать что-то вроде этого - это больше плита котла, но это законно.
@Module(library = true)
public class PropertiesModule {
public final Properties props;
PropertiesModule(Properties props) {
this.props = props;
}
@Provides @Named("property.one") String providePropertyOne() {
props.getProperty("property.one", "some default");
}
@Provides @Named("property.two") String providePropertyTwo() {
props.getProperty("property.two", "some other default");
}
...
}
Это позволит использовать все привязки hte, которые нужно создать, но быть удовлетворенными значениями времени выполнения. Ключи, однако, известны во время компиляции (и должны быть, поскольку вы все равно используете @Named ("строковый литерал"). Если вы определили свои имена свойств и значения по умолчанию как постоянные строки, вы можете даже делать:
@Provides @Named(PROPERTY_NAME_CONSTANT) String a() {
props.getProperty(PROPERTY_NAME_CONSTANT, PROPERTY_NAME_CONSTANT_DEFAULT);
}
Это больше плиты котла, но Кинжал имеет, пытаясь устранить большую плиту котла, предпочитает анализ времени компиляции по абсолютному уменьшению числа плиток котла. Тем не менее, я предложу функцию, которая улучшит эту ситуацию, автоматически создаст модуль для свойств системы из известного списка или некоторых таких. Я думаю, что даже эта плита котла может быть уменьшена.