我的用例是这样的。我的系统已经有一个配置系统,其中我们在文本文件中添加配置,类似于属性文件,但不完全相同。我想重用相同的配置系统。配置系统提供此接口:
public interface ConfigurationProvider {
Boolean getBoolean(String key);
String getString(String key);
Long getLong(String key);
...
}
我想使用@Named批注来注入配置值,例如:
public ClassA {
String stringVal;
Long longVal;
@Inject
public ClassA(@Named("some_str_val" String strVal, @Named("some_long_val") Long longVal)) {
stringVal = strVal;
longVal = longVal;
}
}
我不确定如何根据注释值进行绑定。
class MyConfigModule extends AbstractModule {
ConfigurationProvider configProvider;
MyConfigModule(ConfigurationProvider configProvider) {
configProvider = configProvider;
}
public void configure() {
// Here, I would want to bind String annotated with Named to getString(annotation.value), but not sure how to do that
}
}
答案 0 :(得分:0)
类似
bind(String.class).annotatedWith(Names.named("property.name")).toInstance(configProvider.getString("property.name"));
您可以看中它,或者只是手动添加您希望在其中添加的每个属性。如果您的configProvider
可以遍历字段,则可能会更容易。